Synchronized 與Lock的不同之處

Synchronized 與Lock的不同之處

  1. 用法不一樣。synchronized既可以加在方法上,也可以加載特定的代碼塊上,括號中表示需要鎖的對象。而Lock需要顯示地指定起始位置和終止位置。synchronzied是託管給jvm執行的,Lock鎖定是通過代碼實現的。

  2. 在性能上來說,如果競爭資源不激烈,兩者的性能是差不多的,而當競爭資源非常激烈時(即有大量線程同時競爭),此時Lock的性能要遠遠優於synchronized。所以說,在具體使用時要根據適當情況選擇。

  3. 鎖的機制不一樣。synchronized獲得鎖和釋放的方式都是在塊結構中,而且是自動釋放鎖。而Lock則需要開發人員手動去釋放,並且必須在finally塊中釋放,否則會引起死鎖問題的發生。

  4. Lock是一個接口,不是Java語言內置的;synchronized是Java語言的關鍵字,因此是內置特性。

  5. 採用synchronized不需要用戶去手動釋放鎖,當synchronized方法或者synchronized代碼塊執行完之後或者出現異常時,系統會自動讓線程釋放對鎖的佔用;而Lock在發生異常時,如果沒有主動通unLock()去釋放鎖,則很可能造成死鎖現象,因此使用Lock時需要在finally塊中釋放鎖;

  6. Lock可以讓等待鎖的線程響應中斷,而synchronized卻不行,使用synchronized時,等待的線程會一直等待下去,不能夠響應中斷;通過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到。Lock可以提高多個線程進行讀操作的效率。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章