【发布时间】:2011-07-09 09:38:51
【问题描述】:
我正在阅读关于内存模型的 JLS 规范,17.4.5 Happens-before Order。 我不明白第一条规则:
"# 如果 x 和 y 是同一个线程的动作并且 x 在程序中在 y 之前 顺序,然后是 hb(x, y)。"
假设 A 和 B 是可以在多个线程之间共享的对象(类对象的实例):
int i=A.getNum(); // ActionA
int j=B.getNum(); // ActionB
三个问题:
按照上面的规则,是不是表示hb(ActionA,ActionB)?
如果1的答案为真,是否意味着在任何遵循JSR133内存模型的JVM中,根据happens-before规则,ActionB不能重新排序到ActionA之前?
如果1和2都为真,看来ActionA和ActionB不相关,为什么不能重新排序呢?只是为了这个规范?
【问题讨论】: