Java Volatile keyword

weixin_33912246發表於2017-08-02
Volatile修飾的成員變數在每次被執行緒訪問時,都強迫從主記憶體中重讀該成員變數的值。並且,當成員變數發生變化時,強迫執行緒將變化值回寫到主記憶體。這樣在不論什麼時刻,兩個不同的執行緒總是看到某個成員變數的同一個值。

   
  
Java語言規範中指出:為了獲得最佳速度,同意執行緒儲存共享成員變數的私有拷貝,並且僅僅當執行緒進入或者離開同步程式碼塊時才與共享成員變數的原始值對照。

   
  
這樣當多個執行緒同一時候與某個物件互動時。就必需要注意到要讓執行緒及時的得到共享成員變數的變化。

   
  
而volatilekeyword就是提示VM:對於這個成員變數不能儲存它的私有拷貝,而應直接與共享成員變數互動。   
  
使用建議:在兩個或者很多其它的執行緒訪問的成員變數上使用volatile。

當要訪問的變數已在synchronized程式碼塊中。或者為常量時。不必使用。   
  
因為使用volatile遮蔽掉了VM中必要的程式碼優化。所以在效率上比較低,因此一定在必要時才使用此keyword。   
 

相關文章