學完本章中,讀者需要回答:
1.什么是volatile?
2.volatile如何使用?
3. volatile的幾個特性,如何解決volatile不保證原子性?
6.3.1 JMM Volatile 快取一致性協議
當程式在運行程序中,計算機會將運算需要的資料(變數)從主記憶體復制一份到CPU高速快取中,那么CPU進行運算的時候就可以從它的高速快取讀取和寫入資料,當運算結束后,再將已經修改后的資料(變數)重繪重新寫回到主存當中,這種情況在單執行緒中運行時沒有任何問題的,但是在多執行緒中運行就會有問題了,
以多核CPU為例,現在有二個執行緒,一個執行緒A,一個執行緒B,主記憶體中有一個值為1的變數C,這二個執行緒都要進行賦值加一的操作,執行緒A從主記憶體中復制主記憶體中的變數C,執行緒B同樣的從主記憶體中復制一份變數C,這個時候二個執行緒都有一份值為1的變數,同時進行加一的操作,把執行緒A的最新值2寫入到主記憶體中,此時執行緒B的高速快取當中變數C的值還是1,進行加1操作后,變數C的值為2,然后執行緒B把變數C的值寫入主記憶體,這個時候問題就出現了,二個執行緒都把相同的值寫入到主記憶體中,導致二次加一的操作變成了一次,
所以就出現了快取一致性協議,這個協議保證了每個快取(每個執行緒的私有的作業空間
CSDN認證博客專家
Java
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/253471.html
標籤:java
下一篇:使用中綴運算式實作一個簡易計算機
