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