Java内存模型发生在关系之前

时间:2015-01-16 17:42:13

标签: java

在以下执行中,
T1
l1.lock
a.write
l1.unlock

T2
l2.lock
a.read
l2.unlock

可以在T2中读取用T1写的新值吗?

我有两个相互矛盾的结论:

  1. T1中l1的解锁会将a的新值刷新到主内存中,T2中l2的锁定会强制T2更新缓存,而T2中的l可以获得a的新值。

  2. 由于l1和l2是不同的锁,因此T1中的a的写入在与T2中的a的读取关系之前没有发生。因此,无法保证在T2中读取新值。

  3. 我不知道哪一个是正确的。谁能帮我吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

根据Java语言规范..

1)在同一台显示器上的每次后续锁定之前,显示器上都会发生解锁。

2)线程中的所有动作都发生在任何其他线程从该线程上的join()成功返回之前。

所以,很明显答案是2.如果两个线程在它们之间加入,那么答案就是1.

请参阅JLS了解更多详情..