JMM顺序一致性

时间:2012-11-06 08:56:46

标签: java multithreading

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

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

有两个主题。

线程1:

action1
action2

线程2:

action3
action4

如果action3看到action2的结果,则应该看到action1的结果。

2 个答案:

答案 0 :(得分:4)

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

请注意,顺序一致性不是Java内存模型实际工作的方式

引自17.4.3, Programs and Program Order

  

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

答案 1 :(得分:0)

  

一个线程顺序一致性意味着如果action1在程序顺序中位于action2之前,则action2应该看到action1的结果。

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

  

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

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