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

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

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

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

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

Sync繼承于AbstractQueuedSynchronizer。

AbstractQueuedSynchronizer繼承于AbstractOwnableSynchronizer。

AbstractOwnableSynchronizer類中只定義了一個(gè)exclusiveOwnerThread變量,表示當(dāng)前擁有的線程。

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

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

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

ReentrantLock的lock方法

非公平鎖的lock方法

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

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

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

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

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

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

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

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

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

ReentrantLock的unlock方法

查看release()方法。

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

unparkSuccessor()方法如下:

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

相關(guān)文章

  • Java多線程 ReentrantLock互斥鎖詳解

    Java多線程 ReentrantLock互斥鎖詳解

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

    Lombok和MapStruct整合詳情

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

    Mybatis-Spring源碼分析圖解

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

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

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

    java入門概念個(gè)人理解之package與import淺析

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

    Java虛擬機(jī)裝載和初始化一個(gè)class類代碼解析

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

    java Lombok之@Accessors用法及說明

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

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

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

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

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

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

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

最新評論

威海市| 玉溪市| 勃利县| 墨江| 郑州市| 邹平县| 滕州市| 建始县| 招远市| 宁海县| 牙克石市| 红原县| 丹棱县| 济源市| 封丘县| 左云县| 措勤县| 陵川县| 新营市| 壤塘县| 连城县| 通辽市| 宣威市| 滁州市| 新竹市| 广东省| 尚志市| 尉犁县| 平顺县| 宜良县| 汾西县| 宁明县| 湟中县| 尤溪县| 彰化市| 平顶山市| 临沂市| 云浮市| 武定县| 平遥县| 随州市|