Java 内存模型:易失性变量和发生前
我想澄清一下发生之前的关系如何处理可变变量。让我们有以下变量:
public static int i, iDst, vDst;
public static volatile int v;
和线程 A:
i = 1;
v = 2;
和线程 B:
vDst = v;
iDst = i;
根据 Java 内存模型 (JMM),以下语句是否正确?如果不是,什么是正确的解释?
-
i = 1
总是发生在之前v = 2
-
v = 2
在 JMM 中发生之前,仅当它实际发生之前时才发生vDst = v
-
i = 1
在 JMM 中发生之前(并且将被可预测地分配),如果实际发生之前在时间上iDst = i
iDst
1
v = 2
vDst = v
- 否则,和 之间的顺序未定义,并且 的结果值也未定义
i = 1
iDst = i
iDst
逻辑错误:
JMM中没有“挂钟时间”的概念,我们应该依靠同步顺序作为和的排序指南。有关更多详细信息,请参阅所选答案。v = 2
vDst = v