ReentrantLock與Synchronized的區(qū)別是什么,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。
公司主營(yíng)業(yè)務(wù):網(wǎng)站設(shè)計(jì)制作、網(wǎng)站建設(shè)、移動(dòng)網(wǎng)站開(kāi)發(fā)等業(yè)務(wù)。幫助企業(yè)客戶(hù)真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競(jìng)爭(zhēng)能力。成都創(chuàng)新互聯(lián)是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開(kāi)放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來(lái)的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶(hù)帶來(lái)驚喜。成都創(chuàng)新互聯(lián)推出社旗免費(fèi)做網(wǎng)站回饋大家。
public class ReentrantLock implements Lock, java.io.Serializable {}
ReentrantLock與Synchronized的區(qū)別:
ReentrantLock和synchronized都是獨(dú)占鎖,只允許線程互斥的訪問(wèn)臨界區(qū)。但是實(shí)現(xiàn)上兩者不同:synchronized加鎖解鎖的過(guò)程是隱式的,用戶(hù)不用手動(dòng)操作,優(yōu)點(diǎn)是操作簡(jiǎn)單,但顯得不夠靈活。一般并發(fā)場(chǎng)景使用synchronized的就夠了;ReentrantLock需要手動(dòng)加鎖和解鎖,且解鎖的操作盡量要放在finally代碼塊中,保證線程正確釋放鎖。ReentrantLock操作較為復(fù)雜,但是因?yàn)榭梢允謩?dòng)控制加鎖和解鎖過(guò)程,在復(fù)雜的并發(fā)場(chǎng)景中能派上用場(chǎng)。
ReentrantLock和synchronized都是可重入的。synchronized因?yàn)榭芍厝胍虼丝梢苑旁诒贿f歸執(zhí)行的方法上,且不用擔(dān)心線程最后能否正確釋放鎖;而ReentrantLock在重入時(shí)要卻確保重復(fù)獲取鎖的次數(shù)必須和重復(fù)釋放鎖的次數(shù)一樣,否則可能導(dǎo)致其他線程無(wú)法獲得該鎖。
簡(jiǎn)單點(diǎn)說(shuō):ReentrantLock操作稍微復(fù)雜點(diǎn),但是能手動(dòng)加鎖解鎖,操作比較靈活。
具體區(qū)別:
1、公平鎖:默認(rèn)都是非公平鎖,ReentrantLock能實(shí)現(xiàn)公平鎖(ReentrantLock lock = new ReentrantLock(true))。說(shuō)明:公平鎖是指當(dāng)鎖可用時(shí),在鎖上等待時(shí)間最長(zhǎng)的線程將獲得鎖的使用權(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)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝您對(duì)創(chuàng)新互聯(lián)的支持。