日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【多线程】:Synchronized和ReentrantLock的对比

發布時間:2024/7/19 编程问答 49 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【多线程】:Synchronized和ReentrantLock的对比 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

相同點:

  兩者都是可重入鎖,同一個線程每進入一次,鎖的計數器都自增1,等到鎖的計數器下降為0時才能釋放鎖。

?

底層實現對比:

  Synchronized是依賴于JVM實現的,而ReentrantLock是JDK實現的。

?

性能對比:

  Synchronized優化以前,性能比ReenTrantLock差很多,但是自從Synchronized引入了偏向鎖,輕量級鎖(自旋鎖)后,兩者的性能就差不多了。

  在兩種方法都可用的情況下,官方甚至建議使用synchronized。

  Synchronized的優化借鑒了ReentrantLock中的CAS技術。都是試圖在用戶態就把加鎖問題解決,避免進入內核態的線程阻塞。

?

使用便利性對比:

  Synchronized的使用比較方便簡潔,并且由編譯器去保證鎖的加鎖和釋放;

  而ReentrantLock需要手工聲明來加鎖和釋放鎖,為了避免忘記手工釋放鎖造成死鎖,所以最好在finally中聲明釋放鎖。

?

ReenTrantLock獨有的能力:

  1. ReentrantLock可以指定是公平鎖還是非公平鎖。而Synchronized只能是非公平鎖。PS:公平鎖就是先等待的線程先獲得鎖。

  2. ReentrantLock提供了一個Condition類,用來實現分組喚醒需要喚醒的線程們,而Synchronized只能隨機喚醒一個線程,或者喚醒全部線程。

  3. ReentrantLock提供了一種能夠中斷等待鎖的線程的機制,通過lock.lockInterruptibly()來實現這個機制。

總結:

  ReentrantLock比Synchronized鎖控制粒度更細,更底層,更靈活,但使用不當或不熟悉出錯可能性更高些。所以個人覺得如果涉及上述3種特殊訴求,使用ReentrantLock,否則直接使用Synchronized更方便快捷,且不容易出錯。

?

轉載于:https://www.cnblogs.com/wwcom123/p/10023168.html

總結

以上是生活随笔為你收集整理的【多线程】:Synchronized和ReentrantLock的对比的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。