java - 如果同步块(synchronized block)中的锁对象发生更改,会发生什么情况

标签 java multithreading

如果我们修改同步块(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/

相关文章:

java - 2 个线程和 2 个 JTextArea

java.lang.ClassNotFoundException 仅发生在更新的 Android 9.0 三星设备中

java - 有没有办法使用 POI 将工作表的水平滚动条向左移动一列?

java - 如何从java添加照片到mysql?

Java:更改调用线程的变量

multithreading - 子线程看不到主线程所做的更新

java - 如何在继续方法之前暂停

java - Spring Boot 1.4测试从主要资源加载yaml文件

c++ - SignalObjectAndWait 考虑有 SetEvent 和 WaitForSingleObject 的目的是什么?

java.util.ConcurrentModificationException : Unexpected List modification while multithreading?