请参阅JLS中的以下程序。
该计划的解释在本节末尾: http://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.4.5
我可以理解r1将是1,但是r2的值是多少。 x的写入是否发生 - 在r2读取x之前使r2 = 1?
由于x未同步,它可以在本地内存中,r2可以是0 ??关于发生之前订单的影响,我不清楚这一点。
答案 0 :(得分:1)
根据Happens-before Order(如果hb(x,y)和hb(y,z),那么hb(x,z)),我们有hb(x = 1,y = 1),hb( y = 1,r1 = y),hb(r1 = y,r2 = x),因此hb(x = 1,r2 = x)。所以r2 = 1。