我正在閱讀內存模型上的JLS規範17.4.5 Happens-before Order。 我不明白的第一條規則:瞭解JVM發生前 - 重新排序
「#如果X和Y是相同的線程和X的動作來在y之前在節目 順序,然後HB(X,Y)。」
假設A中的B是對象可在多個線程間共享(類對象的實例):
int i=A.getNum(); // ActionA
int j=B.getNum(); // ActionB
三個問題:
根據上述規則,這是否意味着hb(ActionA,ActionB)?
如果對1的答案是真的,這是否意味着根據發生之前的規則,ActionB無法重新排序在遵循JSR133內存模型的任何JVM之前的ActionA之前?
如果1和2都是真的,ActionA和ActionB似乎不相關,爲什麼不能重新排列呢?只是爲了這個規範?
謝謝大家,現在更清楚了 –