1. 程式人生 > 其它 >Java volatile功能簡介說明

Java volatile功能簡介說明

轉自:

  http://www.java265.com/JavaCourse/202111/1746.html

下文筆者講述volatile關鍵字的功能說明,如下所示:

Java volatile關鍵字功能:
  使系統中所有執行緒對該關鍵字修飾的變數共享可見
   可以禁止執行緒的工作記憶體對volatile修飾的變數進行快取

可見性

當使用volatile關鍵字修飾變數時,它會保證修改的值會立即被更新到主存,當有其它執行緒需要讀取時,會從記憶體中讀取新值

//執行緒1 
boolean stop = false; 
while(!stop){
    doSomething();
} 
//執行緒2 
stop = true
;
以上程式碼在多執行緒執行時,無法保證程式的終止,
需要原因是因為stop變數修改後,並不能立即寫入記憶體中
-----------------------------------------------
執行緒1在執行時,會將stop變數的值拷貝一份放在自己的工作記憶體當中 
那麼當執行緒2更改了stop變數的值之後,但是還沒來得及寫入主存當中
執行緒2轉去做其他事情了
但是執行緒1中的工作記憶體空間的stop變數值並未發生變化,所以程式會一直迴圈下去 
綜上所述,我們可以得知volatile關鍵字的功能
  1. 使用volatile關鍵字會強制將修改的值立即寫入主存
  2. 使用volatile關鍵字的話,當執行緒2進行修改時,會導致執行緒1的工作記憶體中快取變數stop的快取行無效(反映到硬體層的話,就是CPU的L1或者L2快取中對應的快取行無效)
  3. 由於執行緒1的工作記憶體中快取變數stop的快取行無效,所以執行緒1再次讀取變數stop的值時會去主存讀取