synchronize、Lock、ReenTrantLock 的區別


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 可以綁定多個鎖條件


免責聲明!

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



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