- 實現層面不一樣。synchronized 是 Java 關鍵字,JVM層面 實現加鎖和釋放鎖;Lock 是一個接口,在代碼層面實現加鎖和釋放鎖
- 是否自動釋放鎖。synchronized 在線程代碼執行完或出現異常時自動釋放鎖;Lock 不會自動釋放鎖,需要再 finally {} 代碼塊顯式地中釋放鎖
- 是否一直等待。synchronized 會導致線程拿不到鎖一直等待;Lock 可以設置嘗試獲取鎖或者獲取鎖失敗一定時間超時
- 獲取鎖成功是否可知。synchronized 無法得知是否獲取鎖成功;Lock 可以通過 tryLock 獲得加鎖是否成功
- 功能復雜性。synchronized 加鎖可重入、不可中斷、非公平;Lock 可重入、可判斷、可公平和不公平、細分讀寫鎖提高效率
- Java 自學指南
- Java 面試題匯總PC端瀏覽【點這里】
- Java知識圖譜
- Java 面試題匯總小程序瀏覽,掃二維碼
所有資源資源匯總於公眾號