在以下执行中,
T1
l1.lock
a.write
l1.unlock
T2
l2.lock
a.read
l2.unlock
可以在T2中读取用T1写的新值吗?
我有两个相互矛盾的结论:
T1中l1的解锁会将a的新值刷新到主内存中,T2中l2的锁定会强制T2更新缓存,而T2中的l可以获得a的新值。
由于l1和l2是不同的锁,因此T1中的a的写入在与T2中的a的读取关系之前没有发生。因此,无法保证在T2中读取新值。
我不知道哪一个是正确的。谁能帮我吗?非常感谢!
答案 0 :(得分:0)
根据Java语言规范..
1)在同一台显示器上的每次后续锁定之前,显示器上都会发生解锁。
2)线程中的所有动作都发生在任何其他线程从该线程上的join()成功返回之前。
所以,很明显答案是2.如果两个线程在它们之间加入,那么答案就是1.
请参阅JLS了解更多详情..