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