synchronized鎖和lock鎖的區別?

方法鎖主要包括:synchronized鎖和lock鎖

區別:

1)Lock是一個接口,而synchronized是Java中的關鍵字;

2)synchronized當一個線程獲取了對應的鎖,並執行該代碼塊時,其他線程便只能一直等待,等待獲取鎖的線程釋放鎖,不能夠響應中斷,(釋放:1執行完線程自動釋放2發生異常jvm讓線程釋放)((比如調用sleep方法)),這樣的好處是不會導致死鎖現象發生

Lock鎖,可以不讓等待的線程一直無期限地等待下去,比如只等待一定的時間或者響應中斷。

但Lock在發生異常時,如果沒有主動通過unLock()去釋放鎖,則很可能造成死鎖現象,因此使用Lock時必須在try{}catch{}塊中進行,需要在finally塊中釋放鎖;

3)通過Lock可以知道有沒有成功獲取鎖,而synchronized卻無法辦到

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

在併發量比較小的情況下,使用synchronized是個不錯的選擇,但是在併發量比較高的情況下,其性能下降很嚴重,此時ReentrantLock(可重入鎖,唯一實現了Lock接口的類)是個不錯的方案。

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