synchronized和Lock有什么區別?


  • 實現層面不一樣。synchronized 是 Java 關鍵字,JVM層面 實現加鎖和釋放鎖;Lock 是一個接口,在代碼層面實現加鎖和釋放鎖
  • 是否自動釋放鎖。synchronized 在線程代碼執行完或出現異常時自動釋放鎖;Lock 不會自動釋放鎖,需要再 finally {} 代碼塊顯式地中釋放鎖
  • 是否一直等待。synchronized 會導致線程拿不到鎖一直等待;Lock 可以設置嘗試獲取鎖或者獲取鎖失敗一定時間超時
  • 獲取鎖成功是否可知。synchronized 無法得知是否獲取鎖成功;Lock 可以通過 tryLock 獲得加鎖是否成功
  • 功能復雜性。synchronized 加鎖可重入、不可中斷、非公平;Lock 可重入、可判斷、可公平和不公平、細分讀寫鎖提高效率


原文鏈接
 


 

所有資源資源匯總於公眾號



 

 


免責聲明!

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



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