lock和synchronized的同步区别与选择
生活随笔
收集整理的這篇文章主要介紹了
lock和synchronized的同步区别与选择
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
區別如下:
1. lock是一個接口,而synchronized是java的一個關鍵字,synchronized是內置的語言實現;(具體實現上的區別在《Java虛擬機》中有講解底層的CAS不同,以前有讀過現在又遺忘了。)
2. synchronized在發生異常時候會自動釋放占有的鎖,因此不會出現死鎖;而lock發生異常時候,不會主動釋放占有的鎖,必須手動unlock來釋放鎖,可能引起死鎖的發生。(所以最好將同步代碼塊用try catch包起來,finally中寫入unlock,避免死鎖的發生。)
3. lock等待鎖過程中可以用interrupt來終端等待,而synchronized只能等待鎖的釋放,不能響應中斷;
4. lock可以通過trylock來知道有沒有獲取鎖,而synchronized不能;
5. Lock可以提高多個線程進行讀操作的效率。(可以通過readwritelock實現讀寫分離)
轉載于:https://www.cnblogs.com/yankang/p/6399017.html
總結
以上是生活随笔為你收集整理的lock和synchronized的同步区别与选择的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LintCode Find the We
- 下一篇: CPP函数调用的方法