說一下synchronized 和 Lock 的比較?

1.Lock 是接口,而 synchronized 是 Java 中的關鍵字,synchronized 是內置的語言實現;
2.synchronized 在發生異常時,會自動釋放線程佔有的鎖,因此不會導致死鎖現象發生;而 Lock 在發生異常時,如果沒有主動通過 unLock()去釋放鎖,則很可能造成死鎖現象,因此使用 Lock 時需要在 finally 塊中釋放鎖;
3.Lock 可以讓等待鎖的線程響應中斷,而 synchronized 卻不行,使用synchronized 時,等待的線程會一直等待下去,不能夠響應中斷;
4.通過 Lock 可以知道有沒有成功獲取鎖,而 synchronized 卻無法辦到。
5.Lock 可以提高多個線程進行讀操作的效率。
在性能上來說,如果競爭資源不激烈,Synchronized 要優於 Lock,而當競爭資源非常激烈時(即有大量線程同時競爭),此時 Lock 的性能要遠遠優於synchronized。所以說,在具體使用時要根據適當情況選擇。

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