首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JMM顺序一致性

JMM顺序一致性
EN

Stack Overflow用户
提问于 2012-11-06 16:56:46
回答 2查看 1.5K关注 0票数 2

我试图从Java内存模型的角度来理解“顺序一致性”。JLS的定义,第17章对我来说不是很清楚。

我会给出我的愿景,如果我错了,请纠正我。具有单线程顺序一致性的程序意味着如果action1在程序顺序中排在action2之前,那么action2应该会看到action1的结果。

有两条线的

Thread1:

代码语言:javascript
复制
action1
action2

Thread2:

代码语言:javascript
复制
action3
action4

如果action3看到action2的结果,那么它应该也看到action1的结果。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-06 17:01:07

您是对的;顺序一致性意味着每个操作都是原子执行的,并且立即对所有线程可见。这就好像你将所有的线程交错到一个线程中,一个接一个地执行动作。

请注意,顺序一致性实际上并不是Java Memory Model在中工作的方式。

引用自17.4.3, Programs and Program Order

如果我们使用顺序一致性作为内存模型,我们所讨论的许多编译器和处理器优化都是非法的。

票数 6
EN

Stack Overflow用户

发布于 2012-11-06 17:04:37

单线程顺序一致性意味着如果action1在程序顺序中排在action2之前,那么action2应该会看到action1的结果。

这是正确的,没有这个原则就不可能编程。

如果action3看到了action2的结果,那么它也应该看到action1的结果。

如果不使用volatile或锁定,就没有这样的保证。例如,action1可以更新一个缓存线,而action2可以更新另一个缓存线。当这种情况发生时,不能保证第二个线程何时或是否会看到这些更改。

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

https://stackoverflow.com/questions/13247539

复制
相关文章

相似问题

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