Java併發編程(三)可見性

Java極客  |  做者  /  鏗然一葉
這是Java極客的第 31 篇原創文章

1、可見性

多核主機上每一個CPU都有本身的緩存,在操做內存變量時須要先從內存加載到CPU緩存,操做完成後再從CPU緩存更新到內存,若是多個線程同時在不一樣的CPU上操做,那麼看到的數據就有可能不同。如圖:java


T1兩個線程都從內存讀取到變量V。 T2線程A修改了變量V,但還未同步到內存中,此時線程B再次修改變量V,因爲不是在線程A修改的結果上進行修改,就有可能致使錯誤,例如二者都對變量V+1。

2、解決可見性問題

若是要解決變量可見性問題:
1.變量經過volatile關鍵字修飾
2.操做方法同步編程

以上解決方法後面詳細介紹。緩存

end.安全


相關閱讀:
Java併發編程(一)知識地圖
Java併發編程(二)原子性
Java併發編程(四)有序性
Java併發編程(五)建立線程方式概覽
Java併發編程入門(六)synchronized用法
Java併發編程入門(七)輕鬆理解wait和notify以及使用場景
Java併發編程入門(八)線程生命週期
Java併發編程入門(九)死鎖和死鎖定位
Java併發編程入門(十)鎖優化
Java併發編程入門(十一)限流場景和Spring限流器實現
Java併發編程入門(十二)生產者和消費者模式-代碼模板
Java併發編程入門(十三)讀寫鎖和緩存模板
Java併發編程入門(十四)CountDownLatch應用場景
Java併發編程入門(十五)CyclicBarrier應用場景
Java併發編程入門(十六)秒懂線程池差異
Java併發編程入門(十七)一圖掌握線程經常使用類和接口
Java併發編程入門(十八)再論線程安全併發


Java極客站點: javageektour.com/post

相關文章
相關標籤/搜索