我有两个线程 Thread1
和 Thread2
//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/