Java關鍵字——volatile

Java關鍵字——volatile
  1. volatile確保將變量的更新操作通知到其他線程。

  2. volatile變量具備兩種特性:

    • 保證該變量對所有線程可見
    • volatile禁止重排,即volatile變量不會被緩存在寄存器中或對其他處理器不可見的地方。
  3. 由於訪問volatile變量時不會執行加鎖操作,也就不會執行線程阻塞。所以volatile變量是一種比synchronized關鍵字更輕量級的同步機制

  4. volatile使用時必須滿足的2個條件

    • 對變量的寫操作不依賴於當前值(比如i++),或者說是單純的變量賦值(boolean flag = true)
    • 該變量沒有包含在具有其他變量的不變式中,即不同的volatile變量不能相互依賴。
  5. volatile使用實例

    volatile boolean flag = false;
    
  6. volatileSynchronized關鍵字比較

    synchronized volatile
    誰更輕量
    可修飾對象 成員變量與非靜態方法、靜態方法、代碼塊 變量
    原子性 鎖的互斥執行的特性可以確保對整個臨界區代碼執行具有原子性 volatile對任意單個變量的讀/寫具有原子性,但是類似於i++這種複合操作不具有原子性
    多線程訪問 會阻塞 不會阻塞
    synchronize是多線程之間訪問資源的同步性 volatile是變量在多線程之間的可見性
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章