synchronize的可見性和原子性

2021-10-01 23:06:34 字數 414 閱讀 8135

synchronize: 可以保證變數可見性和一段**的原子性

jmm關於synchronized的兩條可見性規定:

*執行緒解鎖前,必須把共享變數的最新值重新整理到主記憶體中

*執行緒加鎖時,將清空工作記憶體中共享變數的值,從而使用共享變數時需要從主記憶體中重新讀取最新的值

參考:

reentrantlock的可見性保證

aqs 中的 state 是 volatile的. volatile為了保證可見性, 會在機器指令中加入lock指令, lock強制把快取(工作記憶體)寫回記憶體(主記憶體), 並失效其它執行緒的快取行(mesi). 這裡要注意的是,lock並不僅僅只是把被volatile修飾的變數寫回主記憶體, 而是把工作記憶體中的變更都寫入主記憶體

參考:

低可見性覆蓋高可見性

本文只討論 public,protected,private,internal 和 virtual一起使用時的問題。1.公共基類定義 public virtual 方法,子類覆蓋時不能降低其可見性。namespace accessmodifier public class baseclass pub...

頁面可見性

1 頁面可見性 顯示的頁面 當前正在看的頁面 隱藏的頁面 我們沒有看到的頁面 2 給document新增visibilitychange事件,document.hidden為true則可見,為false則為隱藏,不同頁面之間切換,觸發visibilitychange事件。document.addev...

併發 可見性

變數的可見性分析 關鍵字 可見性案例驗證 volatile unsafe中loadforce方法實現讀屏障 可見性保證 同步volatile 魔術類記憶體屏障 記憶體屏障說明 loadforce實現volatile讀 快取資料置為無效 重新從主存載入 storeforce實現volatile寫 資料...