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