區別如下:
1. lock是一個接口,而synchronized是java的一個關鍵字,synchronized是內置的語言實現;(具體實現上的區別在《Java虛擬機》中有講解底層的CAS不同,以前有讀過現在又遺忘了。)
2. synchronized在發生異常時候會自動釋放占有的鎖,因此不會出現死鎖;而lock發生異常時候,不會主動釋放占有的鎖,必須手動unlock來釋放鎖,可能引起死鎖的發生。(所以最好將同步代碼塊用try catch包起來,finally中寫入unlock,避免死鎖的發生。)
3. lock等待鎖過程中可以用interrupt來終端等待,而synchronized只能等待鎖的釋放,不能響應中斷;
4. lock可以通過trylock來知道有沒有獲取鎖,而synchronized不能;
5. Lock可以提高多個線程進行讀操作的效率。(可以通過readwritelock實現讀寫分離)
轉載于:https://www.cnblogs.com/yankang/p/6399017.html