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();
}
输出:
答案 0 :(得分:3)
因为他们正在同步不同的对象。线程t
在t
上c
同步c
同步。
如果您创建共享对象f
并将synchronized(f)
放入方法中,它将按您的意图运行。
例如,将private final static Object lock = new Object();
放入A
课程,并将synchronized(lock) { // method body }
放入read()
。
答案 1 :(得分:2)
您正在创建A对象时创建的this
线程上的不同对象上进行同步。要使其工作,您必须同步一个对象,最好是为此目的明确创建的对象。另外,一个挑剔,不扩展线程,而是实现Runnable。