java - 同步对象设置为空

标签 java multithreading synchronization

我有两个线程 Thread1Thread2

//Within Thread1     
synchronized(obj1)  
{  
    obj1 = null;  
}  

//Within Thread2  
synchronized(obj1)  
{  
    do something  
}   

如果 jvm 首先执行 thread1 并将 obj1 设置为 null,那么 thread2 会立即看到该更改还是需要一些时间,并且 jvm 仍然可以运行 thread2 同步块(synchronized block),因为 obj1 尚未为 null?

最佳答案

这几乎肯定会破坏同步抽象——我不相信 thread2 会立即看到更改。您永远不应该更改您正在同步的对象的引用,更不用说将其设置为 null,这将在任何进一步尝试对其进行同步时导致 NullPointerException

关于java - 同步对象设置为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10195054/

相关文章:

C++11 线程队列

c++ - 用 Poco :Condition 唤醒两个线程

hibernate - 在同步方法中使用 Grails 重复记录

java - 如何让我的小程序将用户的输入转换为整数并将其与计算机的随机数进行比较?

java - Google Guava 和一个我无法弄清楚的错误

java - 从jetty中运行的Web应用程序访问本地目录图像

c - 与 pthreads 不一致的运行时

java - 发送邮件时出现ssl异常

multithreading - Python中的多线程异步

linux - 跨不同物理服务器同步 Vagrant VM