面試題:synchronized和lock的區別


synchronized和lock的區別

  • 原始構成:
    • synchronized是關鍵字屬於JVM層面,monitorenter(底層是通過monitor對象來完成,其實wait/notify等方法也依賴於monitor對象只有在同步塊或者方法中才能調用wait/notify)
    • lock是類,是api層面的鎖
  • 使用方法:
    • synchronized不需要手動釋放鎖,當synchronized代碼執行完以后系統會自動讓線程釋放對鎖的占用,
    • ReentrantLock則需要手動釋放鎖,不然可能會導致死鎖現象。
  • 是否可中斷
    • synchronized不可中斷
    • ReentrantLock可以中斷,也可以不中斷,中斷的話要調用Interrupt
  • 加鎖是否公平
    • synchronized非公平鎖
    • ReentrantLock兩者都可以,默認公平鎖。主要看構造方法的boolean值。
  • 綁定多個condition
    • synchronized沒有
    • ReentrantLock用來實現分組喚醒需要的線程們,可以精確喚醒,而不是像synchronized要么隨機喚醒一個或者全部喚醒。

ReentrantLock:https://www.cnblogs.com/dalianpai/p/14204465.html

synchronized:https://www.cnblogs.com/dalianpai/p/14178191.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM