public class Fern extends Thread
{
private String x = "varun";
public void run()
{
synchronized(Fern.class){
System.out.println(x);
try {
sleep(5);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
x = "Anku";
}
}
public static void main(String args[]) throws Exception
{
Fern f = new Fern();
Thread t1 = new Thread(new Fern());
Thread t2 = new Thread(new Fern());
t1.start();
t2.start();
}
}
输出为:
瓦伦
瓦伦
由于该块已在Fern.class上同步,因此一次只能允许一个线程进入该块,而不管它属于哪个实例,因为所有实例的类都只有一个锁。如果用单个Fern对象替换Thread构造函数中的new Fern(),则输出为:
瓦伦
安库
行为就是如果我对此进行同步会发生什么。
自从我同步以来,我不明白为什么会这样
最佳答案
x
不是static
变量。将其更改为static
。
静态字符串x =“ varun”;
编辑:
或将与参数相同的对象传递给t1
和t2
。
Fern f = new Fern();
Thread t1 = new Thread(f); // pass the same object
Thread t2 = new Thread(f);