關於lock和synchronized的選擇
阿新 • • 發佈:2019-05-09
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的選擇