我试图从Java内存模型的角度来理解“顺序一致性”。JLS的定义,第17章对我来说不是很清楚。
我会给出我的愿景,如果我错了,请纠正我。具有单线程顺序一致性的程序意味着如果action1在程序顺序中排在action2之前,那么action2应该会看到action1的结果。
有两条线的
Thread1:
action1
action2Thread2:
action3
action4如果action3看到action2的结果,那么它应该也看到action1的结果。
发布于 2012-11-06 17:01:07
您是对的;顺序一致性意味着每个操作都是原子执行的,并且立即对所有线程可见。这就好像你将所有的线程交错到一个线程中,一个接一个地执行动作。
请注意,顺序一致性实际上并不是Java Memory Model在中工作的方式。
引用自17.4.3, Programs and Program Order
如果我们使用顺序一致性作为内存模型,我们所讨论的许多编译器和处理器优化都是非法的。
发布于 2012-11-06 17:04:37
单线程顺序一致性意味着如果action1在程序顺序中排在action2之前,那么action2应该会看到action1的结果。
这是正确的,没有这个原则就不可能编程。
如果action3看到了action2的结果,那么它也应该看到action1的结果。
如果不使用volatile或锁定,就没有这样的保证。例如,action1可以更新一个缓存线,而action2可以更新另一个缓存线。当这种情况发生时,不能保证第二个线程何时或是否会看到这些更改。
https://stackoverflow.com/questions/13247539
复制相似问题