i = 1
总是在 发生之前v = 2
真正。根据JLS第17.4.5条,
如果 x 和 y 是同一线程的动作,并且 x 按程序顺序位于 y 之前,则 hb(x,y) 。
v = 2
__vDst = v
仅在JMM中实际发生时才 发生- 在JMM中i = 1
__ 如果实际上发生在时间之前,则发生iDst = i
在JMM中-before -before (并且iDst
将可预测地分配1
)v = 2``vDst = v
假。先发生先后顺序不能保证事物在物理时间内先发生。在JLS的同一部分,
应该注意的是,两个动作之间存在先发生关系并不一定意味着在实现中它们必须按照该顺序进行。如果重新排序产生的结果与合法执行相符,则不合法。
它,然而,保证
v = 2之前发生
vDst = v和
i = 1之前发生
iDst = i,如果
v = 2之前谈到
vDst= v的同步顺序,在执行,往往是误认为是实时订单的同步动作的总订单。
- 否则,
i = 1
和之间的顺序iDst = i
不确定,并且的结果值iDst
也不确定
这是,如果情况
vDst = v到来之前
v = 2在同步顺序,但实际时间不来了进去。



