Java volatile功能簡介說明
阿新 • • 發佈:2022-05-11
轉自:
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關鍵字的功能
- 使用volatile關鍵字會強制將修改的值立即寫入主存
- 使用volatile關鍵字的話,當執行緒2進行修改時,會導致執行緒1的工作記憶體中快取變數stop的快取行無效(反映到硬體層的話,就是CPU的L1或者L2快取中對應的快取行無效)
- 由於執行緒1的工作記憶體中快取變數stop的快取行無效,所以執行緒1再次讀取變數stop的值時會去主存讀取