[英]Java happens-before relationship?
考慮以下代碼。
public class Test {
private boolean running = false;
public void run() {
running = true;
}
public void test() {
boolean running1 = running;
boolean running2 = running;
System.out.println("running1: " + running1);
System.out.println("running2: " + running2);
}
}
線程 A 調用run()
,然后另一個線程 B 調用test()
並且不應該有任何發生之前的關系。 我知道不能保證線程 B 看到線程 A 所做的更改。 但是這個程序的output有沒有可能是:
running1: true
running2: false
是的,這是可能的,因為它沒有被明確禁止。
對running1
和running2
的賦值的running
讀取可以相對於彼此以任何順序發生,而對running2
的讀取可能發生在第一個System.out.println
之后。 沒有什么可說的,任何一個讀取都應該來自緩存或主 memory。
基本上,它對於可以打印的內容(以及為什么)非常開放。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.