線程同步之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帶來很是大的執行開
相關文章
相關標籤/搜索