在下面的代码中,Even" synchronized"使用关键字,线程不同步,为什么?

时间:2014-08-23 20:07:54

标签: java multithreading runnable synchronized

class A implements Runnable         //Thread class
{
        public void run()
        {
            read();
        }
        public synchronized void read()
        {
            for(int i= 0 ; i< 7 ;i++)
            System.out.println(Thread.currentThread().getName() + " " + i);
        }
}

public class Main
{

        public static void main(String[] args)
        {
             Thread t = new Thread(new A());
             t.setName("t1");

             Thread c = new Thread(new A());
             c.setName("t2");

            t.start();
            c.start();    
}

输出:

enter image description here

2 个答案:

答案 0 :(得分:3)

因为他们正在同步不同的对象。线程ttc同步c同步。

如果您创建共享对象f并将synchronized(f)放入方法中,它将按您的意图运行。

例如,将private final static Object lock = new Object();放入A课程,并将synchronized(lock) { // method body }放入read()

答案 1 :(得分:2)

您正在创建A对象时创建的this线程上的不同对象上进行同步。要使其工作,您必须同步一个对象,最好是为此目的明确创建的对象。另外,一个挑剔,不扩展线程,而是实现Runnable。