您好,登錄后才能下訂單哦!
這篇文章主要講解了“Synchronized和ReentrantLock鎖的區(qū)別”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Synchronized和ReentrantLock鎖的區(qū)別”吧!
前些天偶然閱讀到了一篇IBM博客,講述Synchronized,ReentrantLock鎖的區(qū)別以及相關的性能比較,讀完發(fā)現(xiàn)獲益匪淺,自己之前對于這塊知識了解的還挺淺的。所以本文就是對此的一個小結吧。這里筆者將主要討論這么幾個話題:Synchronized和ReentrantLock鎖的區(qū)別,二者的性能比較,以及具體場景下的鎖選擇問題(其實也就是二者的優(yōu)劣勢比較了)。
Synchronized關鍵字鎖和ReentrantLock鎖在多線程編程中十分常見,尤其是前者。那么這兩者到底有什么區(qū)別呢?總結下來有下面幾點:
Synchronized鎖會自帶釋放鎖,無須用戶自己執(zhí)行釋放鎖操作,而ReentrantLock需要執(zhí)行l(wèi)ock,unlock操作。
ReentrantLock支持更多鎖原語操作,比如鎖獲取,鎖中斷等待等操作,這些比較高級的屬性在Synchronized上是沒有的。
在性能上,ReentrantLock鎖在鎖高競爭條件下會展現(xiàn)出更好的性能,相較于Synchronized鎖。
但是這兩種鎖也有部分屬性是相同的,比如說默認都是非公平調度策略的。換句話說,就是同樣多線程執(zhí)行請求鎖操作,最終結果不會是FIFO順序來獲得鎖的。其實在多并發(fā)競爭的條件下,公平策略未必是一定必須的,為了保持這種順序性,系統(tǒng)的開銷還是存在的,所以Synchronized鎖和默認的ReentrantLock都是unfair策略的。
既然上節(jié)提到ReentrantLock在高競爭條件下?lián)碛兄玫男阅?,而且它還支持了更多的高級屬性,那么這是不是就意味著我們永遠就使用ReentrantLock鎖而完全不考慮Synchronized鎖了呢?
其實呢,話不能這么說。歸根結底一句話:你真正要用到哪個鎖的屬性時,那就去用哪種鎖。比如說,你要使用到能支持鎖中斷的操作,那么這時就用ReentrantLock鎖。還有一點,也不是說ReentrantLock性能會比Synchronized好,就盲目的都使用ReentrantLock替換現(xiàn)有的Synchronized鎖,只有你真正證明出在當前的場景下,Synchronized關鍵字鎖存在鎖競爭性能問題,然后再去換。但是大部分的普通情況下,Synchronized和ReentrantLock鎖所展現(xiàn)出的性能是相差無幾的。
而且另外一方面,Synchronized鎖也有著它天然的優(yōu)勢,被更多的開發(fā)者所熟知和使用。而且用起來比較簡單,方便,比如說它無需使用者執(zhí)行釋放鎖操作,有的時候新手用戶在使用類似ReentrantLock鎖的時候,忘記了執(zhí)行unlock操作,導致最后程序出現(xiàn)各種奇怪的問題,而且還難以定位。總而言之,ReentrantLock是一種比較“高級”的鎖,比較適合“高級”地去使用。
感謝各位的閱讀,以上就是“Synchronized和ReentrantLock鎖的區(qū)別”的內容了,經過本文的學習后,相信大家對Synchronized和ReentrantLock鎖的區(qū)別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng)、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。