我想澄清发生前的关系如何与volatile变量一起工作。让我们有以下变量:
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
如果实际发生在时间之前iDst = i
,则在 JMM 中发生(并且iDst
将被可预测地分配)1
v = 2
vDst = v
- 否则 and 之间的顺序
i = 1
是iDst = i
未定义的,结果值 ofiDst
也是未定义的
逻辑错误:
JMM 中没有“挂钟时间”的概念,我们应该依赖同步顺序作为 和 的排序v = 2
指南vDst = v
。有关详细信息,请参阅所选答案。