最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java并發(fā)之ReentrantLock類源碼解析

 更新時間:2021年06月29日 08:55:30   作者:LaplaceDemon  
這篇文章主要為大家詳細介紹了Java并發(fā)系列之ReentrantLock源碼,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

ReentrantLock內(nèi)部由Sync類實例實現(xiàn)。

Sync類定義于ReentrantLock內(nèi)部。

Sync繼承于AbstractQueuedSynchronizer。

AbstractQueuedSynchronizer繼承于AbstractOwnableSynchronizer。

AbstractOwnableSynchronizer類中只定義了一個exclusiveOwnerThread變量,表示當前擁有的線程。

除了Sync類,ReentrantLock內(nèi)部還定義了兩個實現(xiàn)類。

NonfairSync是非公平鎖。FairSync 是公平鎖。

ReentrantLock兩個構(gòu)造方法如下:

ReentrantLock的lock方法

非公平鎖的lock方法

compareAndSetState方法是一個CAS方法。該方法嘗試去更新對象內(nèi)的一個變量。變量期望是0,更新為1。

若更新成功,則將exclusiveOwnerThread變量設(shè)置為當前線程。然后lock方法會立刻返回。

若更新不成功,則調(diào)用acquire(1)。

acquire方法中首先調(diào)用tryAcquire()再次嘗試更新。

非公平鎖的tryAcquire()方法如下:

非公平鎖的tryAcquire()方法內(nèi)部調(diào)用nonfairTryAcquire方法如下:

若tryAcquire()方法再次嘗試不成功。則首先會調(diào)用addWaiter()方法,將當前線程加入等待隊列。addWaiter方法返回一個Node節(jié)點。

返回節(jié)點后,acquireQueued(node,1)會再次嘗試去做更新。

若還是無法更新,則通過parkAndCheckInterrupt將線程掛起。

ReentrantLock的unlock方法

查看release()方法。

若隊列的head不為空,且head的等待狀態(tài)不為0,則調(diào)用unparkSuccessor()方法。

unparkSuccessor()方法如下:

使node的next從后向前遍歷,獲取到隊列中最前面的一個waitStatus小于0的線程。然后將節(jié)點上的線程繼續(xù)執(zhí)行。

相關(guān)文章

  • Java多線程 ReentrantLock互斥鎖詳解

    Java多線程 ReentrantLock互斥鎖詳解

    這篇文章主要介紹了Java多線程 ReentrantLock互斥鎖詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-09-09
  • Lombok和MapStruct整合詳情

    Lombok和MapStruct整合詳情

    這篇文章主要介紹了Lombok和MapStruct整合詳情,文章基于Java的相關(guān)資料展開詳細內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • Mybatis-Spring源碼分析圖解

    Mybatis-Spring源碼分析圖解

    這篇文章主要介紹了Mybatis-Spring源碼分析,本文通過實例代碼圖文相結(jié)合給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • SpringMVC @GetMapping注解路徑?jīng)_突問題解決

    SpringMVC @GetMapping注解路徑?jīng)_突問題解決

    MD5對密碼進行加密存儲是常見的一種加密方式,本文主要介紹了Java雙重MD5加密實現(xiàn)安全登錄,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java入門概念個人理解之package與import淺析

    java入門概念個人理解之package與import淺析

    下面小編就為大家?guī)硪黄猨ava入門概念個人理解之package與import淺析。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Java虛擬機裝載和初始化一個class類代碼解析

    Java虛擬機裝載和初始化一個class類代碼解析

    這篇文章的主要內(nèi)容是Java虛擬機裝載和初始化一個class類的代碼解析,包括介紹了裝載和初始化的時機與方式,需要的朋友可以參考下。
    2017-09-09
  • java Lombok之@Accessors用法及說明

    java Lombok之@Accessors用法及說明

    這篇文章主要介紹了java Lombok之@Accessors用法及說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • 教你在SpringBoot中管理多環(huán)境配置文件

    教你在SpringBoot中管理多環(huán)境配置文件

    在項目開發(fā)中,一般會分為開發(fā)環(huán)境,測試環(huán)境和生產(chǎn)環(huán)境.如果總是在一個文件中修修改改,難免會出現(xiàn)錯誤,尤其是在交接的過程中,一旦出現(xiàn)問題,輕則丟失績效,重則需要刪庫跑路.本文則帶大家詳細了解怎么管理多環(huán)境配置文件,需要的朋友可以參考下
    2021-05-05
  • default怎么修飾接口中的方法詳解

    default怎么修飾接口中的方法詳解

    今天給各位小伙伴們總結(jié)一下default怎么修飾接口中的方法,文中有非常詳細的圖文解說.對正在學(xué)習(xí)java的小伙伴們很有幫助,需要的朋友可以參考下
    2021-05-05
  • GC參考手冊二java中垃圾回收原理解析

    GC參考手冊二java中垃圾回收原理解析

    由于有個垃圾回收機制,java中的額對象不在有“作用域”的概念,只有對象的引用才有“作用域”。垃圾回收可以有效的防止內(nèi)存泄露,有效的使用空閑的內(nèi)存<BR>
    2022-01-01

最新評論

于田县| 博白县| 孙吴县| 甘德县| 沁源县| 恩施市| 左云县| 雅安市| 伊金霍洛旗| 湾仔区| 老河口市| 体育| 巧家县| 天镇县| 文成县| 贵德县| 常州市| 荔浦县| 惠水县| 体育| 陇南市| 阜城县| 徐闻县| 青田县| 麻江县| 梧州市| 长治县| 阿拉善盟| 资源县| 民县| 嵊州市| 关岭| 泾阳县| 卫辉市| 吴桥县| 庄河市| 通山县| 康平县| 正安县| 蒙自县| 浙江省|