首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java内存模型与关系发生

Java内存模型与关系发生
EN

Stack Overflow用户
提问于 2015-01-16 17:42:13
回答 1查看 46关注 0票数 0

在下面的执行中,

T1

l1.lock

a.write

l1.unlock

代码语言:javascript
复制
      T2 
代码语言:javascript
复制
      l2.lock 
代码语言:javascript
复制
      a.read 
代码语言:javascript
复制
      l2.unlock

T2中的a能读取用T1编写的新值吗?

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

  1. l1在T1中的解锁将a的新值刷新到主存中,而T2中的l2锁将迫使T2更新缓存,而T2中的a可以获得a的新值。
  2. 由于l1和l2是不同的锁,所以在与a在T2的读取之间发生关系之前,在T1中写入a是没有发生的。因此,T2中的一个不能被保护来读取新的值。

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

EN

回答 1

Stack Overflow用户

发布于 2015-01-16 17:59:28

根据Java语言规范..。

1)监视器上的解锁发生--在上的每个后续锁之前,同一个监视器

2)线程中的所有操作--在任何其他线程成功地从该线程上的join()返回之前。

很明显,答案是2。如果两个线程之间有连接,那么答案是1。

详情请向JLS查询。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27989704

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档