1. 程式人生 > 實用技巧 >多執行緒:volatile

多執行緒:volatile

>>> hot3.png

volatile關鍵字比較少使用,因為: 1:在早前的Java版本中,這個關鍵字在不同的作業系統中有不同的表現,導致了可移植性比較差。 2:比較難設計,誤用較多

每個執行緒都執行在棧記憶體中,每個執行緒都有自己的工作記憶體(比如暫存器Register,快取記憶體器Cache),執行緒的計算是通過工作記憶體進行互動的。 多執行緒讀取變數

如何解決不同執行緒持有的公共資源不同步的狀況? 可以使用synchronized方法,也可以使用Lock鎖 也可以在一個變數前加入volatile關鍵字,可以保證每個執行緒對本地變數的訪問和修改都是通過直接與主記憶體互動完成的,而不是與本執行緒的工作記憶體互動的,這樣就能保證每個執行緒都能獲得最新鮮的變數值。 執行緒讀取變數示意圖

volatile變數能否保持資料的同步性呢? 兩個執行緒同時修改一個volatile變數能否產生髒資料呢? 答案是肯定的,volatile關鍵字並不能保證執行緒的安全性,它只能保證當前執行緒需要變數值的時候能夠獲取最新的值。而不能保證多個執行緒修改的安全性。 在CPU消耗較重時,執行緒負荷較大,出現單個執行緒搶佔整個CPU的情況,這時就會出現這種volatile執行緒不安全的情況

轉載於:https://my.oschina.net/sudojs/blog/287897