1. 程式人生 > >關於lock和synchronized的選擇

關於lock和synchronized的選擇

dwr 實現 fin 進行 java finall code 使用 可能

這裏不介紹具體用法,介紹lock和synchronized的不同從而做出選擇

1.lock是一個接口,而synchronized是java中的一個關鍵字,synchronized是內置的語言實現。

2.synchronized在發生異常時,會自動釋放線程占有的鎖,因此不會導致死鎖現象發生;而lock在發生異常時,如果沒有主動

通過unlock()釋放鎖,則很可能造成死鎖現象。因此使用lock時最好用到try,catch並且在finally塊中釋放鎖。

3.lock可以讓等待鎖的線程相應中斷(使用lock的實現類:ReentrantLock的lockInterruptibly()方法,用

線程對象名+interrupt()中斷線程的等待),而synchronized卻不行,使用synchronized時,等待的線程會一直等待下去,不能夠相應中斷。

4.通過lock可以知道有沒有成功獲取鎖(用ReentrantLock的trylock()方法返回布爾值),而synchronized無法辦到。

5.lock可以提高多個線程進行讀操作的效率,因為lock具有ReentrantReadWriteLock實現類的readLock()返回讀鎖,

ReentrantReadWriteLock實現類的writeLock()返回寫鎖。

綜合分析:

在性能上來說,如果競爭資源不激烈,兩者的性能是差不多的,而當競爭資源非常激烈時(即有大量線程同時競爭),

此使lock的性能遠遠優於synchronized,所以在具體使用時要根據具體情況選擇。

關於lock和synchronized的選擇