使用 volatile 必須具備的條件
對變量的寫操作不依賴于當前值。該變量沒有包含在具有其他變量的不變式中。只有在狀態真正獨立于程序內其他內容時才能使用 volatile。
例子 1: 單例模式
單例模式的一種實現方式,但很多人會忽略 volatile 關鍵字,因為沒有該關鍵字,程序也可以很好的運行,只不過代碼的穩定性總不是 100%,說不定在未來的某個時刻,隱藏的 bug 就出來了。
例子2: volatile bean
在 volatile bean 模式中,JavaBean 的所有數據成員都是 volatile 類型的,并且 getter 和 setter 方法必須非常普通 —— 除了獲取或設置相應的屬性外,不能包含任何邏輯。此外,對于對象引用的數據成員,引用的對象必須是有效不可變的。(這將禁止具有數組值的屬性,因為當數組引用被聲明為 volatile 時,只有引用而不是數組本身具有 volatile 語義)。對于任何 volatile 變量,不變式或約束都不能包含 JavaBean 屬性。