如果我们修改synchronized块内的锁定对象会发生什么? 我认为同步将失败,任何线程都可以进入同步块。但是当我运行程序时,同步仍然完好无损。为什么?
synchronized(obj)
{
System.out.println("1 " + Thread.currentThread().getId());
obj = new Object();
System.out.println("2 " +Thread.currentThread().getId());
}
这里是完整程序的链接
http://www.javaroots.com/2015/01/java-multithreading-interview-question.html
答案 0 :(得分:1)
你没有改变对象,你只是创建了一个新对象并告诉编译器你将它命名为“obj”(所以“obj”不再指你的原始对象),所以每次修改“obj”会影响新创建的对象。