1. 程式人生 > >java volatile關鍵字(及使用場景)

java volatile關鍵字(及使用場景)

正確使用 volatile 變數的條件

您只能在有限的一些情形下使用 volatile 變數替代鎖。要使 volatile 變數提供理想的執行緒安全,必須同時滿足下面兩個條件:

  • 對變數的寫操作不依賴於當前值。
  • 該變數沒有包含在具有其他變數的不變式中。

實際上,這些條件表明,可以被寫入 volatile 變數的這些有效值獨立於任何程式的狀態,包括變數的當前狀態。

第一個條件的限制使 volatile 變數不能用作執行緒安全計數器。雖然增量操作(x++)看上去類似一個單獨操作,實際上它是一個由讀取-修改-寫入操作序列組成的組合操作,必須以原子方式執行,而 volatile 不能提供必須的原子特性。實現正確的操作需要使x

的值在操作期間保持不變,而 volatile 變數無法實現這點。(然而,如果將值調整為只從單個執行緒寫入,那麼可以忽略第一個條件。) 

volatile一個使用場景是狀態位;還有隻有一個執行緒寫,其餘執行緒讀的場景