volatile關鍵字

volatile關鍵字

@Date 2016.06.20

共享變量

  • 多個線程之間能夠被共享的變量
  • 存放在堆內存中的實例變量,靜態變量,數組變量

內存屏障

  • CPU指令,用於實現對內存操作的順序限制

Volatile

  • 確保所有線程看到這個變量的值是一致的
  • 不會引起線程上下文的切換和調度
  • JVM就會向處理器發送一條Lock前綴的指令
  • 緩存一致性協議: 當處理器發現自己緩存行對應的內存地址被修改,會將當前處理器的緩存行設置成無效狀態
  • 將當前處理器緩存行的數據會寫回到系統內存
  • 寫回內存的操作會引起在其他CPU裏緩存了該內存地址的數據無效
  • 大多數處理器高速緩存行是64個字節寬
  • 保證了可見性(對於一個變量i,多個線程同時去操作(比如++),i的值一定是0->1->2->3,而如果不加volatile則i的值可能是0->1->1->2)
  • 不保證順序性和原子性(volatile不會鎖住變量,你再對第一個變量i做完操作之後,下一個volatile變量j可能已經發生改變了)

補充

  • 強制線程去主存中讀取Heap的信息
  • 在併發時可以保證讀取的最新的,但是不能保證對變量的操作是互斥以及順序執行的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章