java 可重入鎖ReentrantLock的介紹

一個(gè)小例子幫助理解(我們常用的synchronized也是可重入鎖)

話說從前有一個(gè)村子蝎宇,在這個(gè)村子中有一口水井,家家戶戶都需要到這口井里打水喝襟齿。由于井水有限铸本,大家只能依次打水。為了實(shí)現(xiàn)家家有水喝体斩,戶戶有水用的目標(biāo)梭稚,村長(zhǎng)絞盡腦汁,最終想出了一個(gè)比較合理的方案絮吵。

首先弧烤,在水井邊上安排一個(gè)看井人,負(fù)責(zé)維持秩序蹬敲。

然后暇昂,打水時(shí),以家庭為單位伴嗡,哪個(gè)家庭任何人先到井邊急波,就可以先打水,而且如果一個(gè)家庭占到了打水權(quán)瘪校,其家人這時(shí)候過來打水不用排隊(duì)澄暮。而那些沒有搶占到打水權(quán)的人,一個(gè)一個(gè)挨著在井邊排成一隊(duì)阱扬,先到的排在前面赏寇。

最后,打水的人打完水以后就告訴看井人价认,看井人就讓等待的隊(duì)伍中的最前面一個(gè)去打水嗅定。

這樣一來,大家都能打到水用踩,也保證了相對(duì)的公平渠退。這就是公平鎖的基本思路忙迁。

隨著時(shí)間的推移,村民發(fā)現(xiàn)每次去打水的時(shí)候都需要排隊(duì)碎乃,想著每次排隊(duì)都浪費(fèi)時(shí)間姊扔,于是就把水桶放在井邊代替,自己則溜回家去了梅誓。這樣一搞恰梢,可把看井人累壞,經(jīng)常往村民家里跑梗掰,讓他們來打水嵌言。于是聰明的看井人想出了一個(gè)對(duì)策,如果有人打完水后及穗,剛好又有其它人來打水摧茴,就直接讓這個(gè)新來的人上去打水,不用到隊(duì)伍末尾去排隊(duì)等候埂陆。

這種方式雖然看上去不公平苛白,但是他節(jié)省了資源,提高了打水的性能焚虱,這就是非公平鎖的基本思路购裙。

打水的小故事在java中的應(yīng)用

Java中可重入鎖-ReentrantLock基本上就是按照上面的思路來實(shí)現(xiàn)的,我們來對(duì)給他們做一個(gè)簡(jiǎn)單的對(duì)比鹃栽。

一次只有一個(gè)人能打水 鎖需要保證多線程的同步缓窜。

必須嚴(yán)格按照排隊(duì)順序打水 ReentrantLock提供的公平鎖功能。

來得早不如來得巧 ReentrantLock提供的非公平鎖功能谍咆。

有家人正在打水的時(shí)候就不需要排隊(duì) ReentrantLock的可重入特性禾锤。

那么可重入鎖又是怎樣實(shí)現(xiàn)上面那些特性的呢?

java可重入鎖-ReentrantLock實(shí)現(xiàn)細(xì)節(jié)

首先我們從上面的故事入手摹察,看看ReentrantLock中的各個(gè)角色都是怎么樣的恩掷。

打水權(quán) volatile int state

打水者 線程、Thread

打水隊(duì)伍 雙向鏈表Node

獲取鎖的時(shí)候供嚎,公平鎖的整個(gè)工作流程就如下圖所示:


image

可重入公平鎖獲取流程

在獲取鎖的時(shí)候黄娘,如果當(dāng)前線程之前已經(jīng)獲取到了鎖,就會(huì)把state加1克滴,在釋放鎖的時(shí)候會(huì)先減1逼争,這樣就保證了同一個(gè)鎖可以被同一個(gè)線程獲取多次,而不會(huì)出現(xiàn)死鎖的情況劝赔。這就是ReentrantLock的可重入性誓焦。

對(duì)于非公平鎖而言,調(diào)用lock方法后着帽,會(huì)先嘗試搶占鎖杂伟,在各種判斷的時(shí)候會(huì)先忽略等待隊(duì)列移层,如果鎖可用,就會(huì)直接搶占使用赫粥。

釋放鎖的時(shí)候观话,整個(gè)工作流程如下圖:


image

可重入鎖釋放過程

本文為轉(zhuǎn)載:https://baijiahao.baidu.com/s?id=1594800969528243663&wfr=spider&for=pc
參考:https://blog.csdn.net/yanyan19880509/article/details/52345422

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市越平,隨后出現(xiàn)的幾起案子频蛔,更是在濱河造成了極大的恐慌,老刑警劉巖秦叛,帶你破解...
    沈念sama閱讀 218,122評(píng)論 6 505
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晦溪,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡书闸,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,070評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門利凑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浆劲,“玉大人,你說我怎么就攤上這事哀澈∨平瑁” “怎么了?”我有些...
    開封第一講書人閱讀 164,491評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵割按,是天一觀的道長(zhǎng)膨报。 經(jīng)常有香客問我,道長(zhǎng)适荣,這世上最難降的妖魔是什么现柠? 我笑而不...
    開封第一講書人閱讀 58,636評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮弛矛,結(jié)果婚禮上够吩,老公的妹妹穿的比我還像新娘。我一直安慰自己丈氓,他們只是感情好周循,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,676評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著万俗,像睡著了一般湾笛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上闰歪,一...
    開封第一講書人閱讀 51,541評(píng)論 1 305
  • 那天嚎研,我揣著相機(jī)與錄音,去河邊找鬼库倘。 笑死嘉赎,一個(gè)胖子當(dāng)著我的面吹牛置媳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播公条,決...
    沈念sama閱讀 40,292評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼拇囊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了靶橱?” 一聲冷哼從身側(cè)響起寥袭,我...
    開封第一講書人閱讀 39,211評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎关霸,沒想到半個(gè)月后传黄,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,655評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡队寇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,846評(píng)論 3 336
  • 正文 我和宋清朗相戀三年膘掰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片佳遣。...
    茶點(diǎn)故事閱讀 39,965評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡识埋,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出零渐,到底是詐尸還是另有隱情窒舟,我是刑警寧澤,帶...
    沈念sama閱讀 35,684評(píng)論 5 347
  • 正文 年R本政府宣布诵盼,位于F島的核電站惠豺,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏风宁。R本人自食惡果不足惜洁墙,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,295評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望戒财。 院中可真熱鬧扫俺,春花似錦、人聲如沸固翰。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,894評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)骂际。三九已至疗琉,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間歉铝,已是汗流浹背盈简。 一陣腳步聲響...
    開封第一講書人閱讀 33,012評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人柠贤。 一個(gè)月前我還...
    沈念sama閱讀 48,126評(píng)論 3 370
  • 正文 我出身青樓香浩,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親臼勉。 傳聞我的和親對(duì)象是個(gè)殘疾皇子邻吭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,914評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 在這個(gè)世界上,有無數(shù)人想要通過創(chuàng)業(yè)獲得財(cái)富宴霸,而創(chuàng)業(yè)獲得的第一桶金對(duì)于一個(gè)創(chuàng)業(yè)者來說至關(guān)重要囱晴。那么,如何獲得第一桶...
    exxxxxxculibur閱讀 511評(píng)論 1 1
  • 因?yàn)楫吘乖谂嘤?xùn)機(jī)構(gòu)工作瓢谢,所以難免會(huì)比較商業(yè)化畸写。年終各種續(xù)費(fèi)的壓力,直接就到了老師的頭上氓扛。說句實(shí)話枯芬,其實(shí)我感覺自己挺...
    特立_獨(dú)行閱讀 168評(píng)論 0 0
  • 筆者:花間溪 五月的呼倫貝爾,花開了采郎。我病了一個(gè)多月千所,剛好些。姐姐說尉剩,我們?nèi)ド⑸⑿陌烧媛>瓦@樣沒計(jì)劃沒目的毅臊,開始了理茎,...
    花間溪閱讀 385評(píng)論 1 8
  • 我想你,我家那可愛的小弟管嬉。 我已經(jīng)好久沒有夢(mèng)到你了皂林,天堂那邊的你,過得好嗎蚯撩,姐姐相信你础倍,你還是小時(shí)候那個(gè)一開心就活...
    叮丟丟閱讀 308評(píng)論 0 1
  • 文/田心 01 寶貝犹菇,這是媽媽第二次寫關(guān)于你的文字德迹,其實(shí)內(nèi)心里是有些愧疚感的。 想的永遠(yuǎn)比做的更美...
    田心成長(zhǎng)屋閱讀 1,891評(píng)論 7 14