以下java程序如何在“发生之前”的订单示例中运行?

时间:2011-07-07 13:09:39

标签: java

请参阅JLS中的以下程序。

http://java.sun.com/docs/books/jls/third_edition/html/memory7.gif

该计划的解释在本节末尾:  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 ??关于发生之前订单的影响,我不清楚这一点。

1 个答案:

答案 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。