簡體   English   中英

Java 發生之前的關系?

[英]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

是的,這是可能的,因為它沒有被明確禁止。

running1running2的賦值的running讀取可以相對於彼此以任何順序發生,而對running2的讀取可能發生在第一個System.out.println之后。 沒有什么可說的,任何一個讀取都應該來自緩存或主 memory。

基本上,它對於可以打印的內容(以及為什么)非常開放。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM