線程同步之synchronized volatile ReentrantLock CAS總結
synchronized
- 同步鎖本身控制放行或者不放行
- 修飾的靜態方法做用於這個類的全部對象
- 修飾的類做用於這個類的全部對象
volatile
- 不須要加鎖,修改以後當即內存可見,直接存儲在內存不須要進入到cpu
- 變量修飾符,僅僅能夠用戶變量,synchronized能夠做用於變量和方法
- 標記的變量不會被編譯器優化
ReentrantLock
- 多重鎖,贊成個線程能夠調用屢次鎖造成多層鎖,同一個線程進入一次,鎖的計數器都自增1
- synchronized 是jvm層面實現的,reentrantlock是API層面的實現
- synchronized比較簡潔,Reentrantlock須要手動處理
CAS(Compare-and-Swap)
- CAS指令須要3個操做數,內存地址,舊的預期,新值
- 存在ABA問題 AtomicStampedReference來解決ABA問題
- 自旋CAS(不成功,就一直循環執行,直到成功==)若是長時間不成功,會給CPU帶來很是大的執行開
歡迎關注本站公眾號,獲取更多信息