synchronize 和Lock:
1、synchronize 系java 內置關鍵字;而Lock 是一個類
2、synchronize 可以作用於變量、方法、代碼塊;而Lock 是顯式地指定開始和結束位置
3、synchronize 不需要手動解鎖,當線程拋出異常的時候,會自動釋放鎖;而Lock則需要手動釋放,所以lock.unlock()需要放在finally 中去執行
4、性能方面,如果競爭不激烈的時候,synchronize 和Lock 的性能差不多,如果競爭激烈的時候,Lock 的效率會比synchronize 高
5、Lock 可以知道是否已經獲得鎖,synchronize 不能知道。Lock 擴展了一些其他功能如讓等待的鎖中斷、知道是否獲得鎖等功能;Lock 可以提高效率。
6、synchronize 是悲觀鎖的實現,而Lock 則是樂觀鎖的實現,采用的CAS 的嘗試機制
-------------------------------------------------------------------------------------------------
synchronize 和 ReenTrantLock:
除開上面和Lock 的區別,還有一下的一些區別:
1、ReenTrantLock 可以中斷鎖的等待,提供了一些高級功能
2、多個線程在等待的時候,可以提供公平的鎖;默認的是非公平鎖,性能會比公平鎖好一些;
3、ReenTrantLock 可以綁定多個鎖條件
