簡體   English   中英

類成員變量需要Java“volatile”?

[英]Java “volatile” needed for class member variables?

我有一個關於 Java “volatile” 關鍵字的問題:

假設,我們有以下類:

public class BooleanValClass {

    private boolean bolVal = false;

    public boolean getVal() {
        return this.bolVal;
    }

    public void setVal(boolean val) {
        bolVal = val;
    }
}

現在,假設一個線程正在使用這個帶有“volatile”關鍵字的類:

private volatile BooleanValClass myClass = new BooleanValClass();

我是否必須將“volatile”關鍵字也附加到“BooleanValClass”類的成員字段“bolVal”,還是對象的“volatile”引用某種“重定向”到“BooleanValClass”類的所有成員?

謝謝,湯姆

什么都沒有重定向。 myClass是 volatile, bolVal不是。 myClass分配和讀取的工作是不穩定的。 bolVal分配/讀取不是。

在 Java 中,除了 long 和 double 之外的所有類型的字段都由 JVM 原子地發生,如果該字段用 VOLATILE 修飾符聲明,那么即使 long 和 double 也會被原子地讀寫。 原子保證,我們可以 100% 獲得變量中的內容,或者變量中將計算的內容,變量中也不可能有任何中間結果。

暫無
暫無

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

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