1. 程式人生 > >執行緒安全-可見性

執行緒安全-可見性

導致共享變數線上程間不可見的原因 1、執行緒的交叉執行 2、重排序結合線程交叉執行 3、共享變數更新後的值沒有在工作記憶體與主記憶體間及時更新
可見性-synchronized JMM關於synchronized的兩條規定: 1、執行緒解鎖前,必須把共享變數的最新值重新整理到主記憶體 2、執行緒加鎖時,將清空工作記憶體中共享變數的值,從而使用共享變數時需要從 主記憶體中重新讀取最新的值( 注意:加鎖與解鎖是同一把鎖可見性-volatile
通過加入記憶體屏障和禁止重排序優化來實現 1、對volatile變數寫操作時,會在寫操作後加入一條store屏障指令,將本地記憶體中的 共享變數值重新整理到主記憶體 2、對volatile變數讀操作時,會在讀操作前加入一條load屏障指令,從主記憶體讀取 共享變數 示意圖: