溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

ReentrantLock與Synchronized的區(qū)別是什么

發(fā)布時(shí)間:2021-10-19 18:39:55 來源:億速云 閱讀:142 作者:柒染 欄目:大數(shù)據(jù)

ReentrantLock與Synchronized的區(qū)別是什么,很多新手對此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來學(xué)習(xí)下,希望你能有所收獲。

public class ReentrantLock implements Lock, java.io.Serializable {}

ReentrantLock與Synchronized的區(qū)別:

  • ReentrantLock和synchronized都是獨(dú)占鎖,只允許線程互斥的訪問臨界區(qū)。但是實(shí)現(xiàn)上兩者不同:synchronized加鎖解鎖的過程是隱式的,用戶不用手動(dòng)操作,優(yōu)點(diǎn)是操作簡單,但顯得不夠靈活。一般并發(fā)場景使用synchronized的就夠了;ReentrantLock需要手動(dòng)加鎖和解鎖,且解鎖的操作盡量要放在finally代碼塊中,保證線程正確釋放鎖。ReentrantLock操作較為復(fù)雜,但是因?yàn)榭梢允謩?dòng)控制加鎖和解鎖過程,在復(fù)雜的并發(fā)場景中能派上用場。

  • ReentrantLock和synchronized都是可重入的。synchronized因?yàn)榭芍厝胍虼丝梢苑旁诒贿f歸執(zhí)行的方法上,且不用擔(dān)心線程最后能否正確釋放鎖;而ReentrantLock在重入時(shí)要卻確保重復(fù)獲取鎖的次數(shù)必須和重復(fù)釋放鎖的次數(shù)一樣,否則可能導(dǎo)致其他線程無法獲得該鎖。

 簡單點(diǎn)說:ReentrantLock操作稍微復(fù)雜點(diǎn),但是能手動(dòng)加鎖解鎖,操作比較靈活。

具體區(qū)別:

1、公平鎖:默認(rèn)都是非公平鎖,ReentrantLock能實(shí)現(xiàn)公平鎖(ReentrantLock lock = new ReentrantLock(true))。說明:公平鎖是指當(dāng)鎖可用時(shí),在鎖上等待時(shí)間最長的線程將獲得鎖的使用權(quán)。而非公平鎖則隨機(jī)分配這種使用權(quán)。

2、相應(yīng)中斷:ReentrantLock給我們提供了一個(gè)可以響應(yīng)中斷的獲取鎖的方法lockInterruptibly();

3、限時(shí)等待:tryLock();

4、等待通知(喚醒)機(jī)制:lock.newCondition(); condition.await();condition.signal();可利用實(shí)現(xiàn)堵塞隊(duì)列機(jī)制

看完上述內(nèi)容是否對您有幫助呢?如果還想對相關(guān)知識有進(jìn)一步的了解或閱讀更多相關(guān)文章,請關(guān)注億速云行業(yè)資訊頻道,感謝您對億速云的支持。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI