如果我们修改同步块(synchronized block)内的锁对象会发生什么? 我认为同步将会失败,任何线程都可以进入同步块(synchronized block)。但当我运行该程序时,同步仍然完好无损。为什么 ?
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
最佳答案
你没有改变对象,你只是创建了一个新对象并告诉编译器你将把它命名为“obj”(这样“obj”不再指你原来的对象),所以对“obj”的每次修改会影响新创建的对象。
关于java - 如果同步块(synchronized block)中的锁对象发生更改,会发生什么情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28022590/