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

AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊(duì)管理

 更新時(shí)間:2023年11月02日 09:03:21   作者:lane  
這篇文章主要介紹了為大家AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊(duì)管理源碼解讀,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

AbstractQueuedSynchronizer

AbstractQueuedSynchronizer簡(jiǎn)稱(chēng)AQS,ReentrantLock,ReentrantReadWriteLock,CountDownLatch,Semaphore等等這些鎖都是基于AQS實(shí)現(xiàn)的。

AQS核心主要實(shí)現(xiàn)了鎖的狀態(tài)的同步,隊(duì)列排隊(duì)、喚醒管理,鎖的釋放等底層功能。

主要基于state屬性來(lái)控制鎖的可用狀態(tài),通過(guò)維護(hù)一個(gè)CLH雙向鏈表隊(duì)列來(lái)管理并發(fā)獲取鎖的線(xiàn)程進(jìn)行排隊(duì)。

主要屬性

/**
 * 隊(duì)列頭節(jié)點(diǎn),延遲初始化,除了初始化時(shí)僅能通過(guò)setHead方法修改
 */
private transient volatile Node head;
/**
 * 隊(duì)列尾節(jié)點(diǎn),延遲初始化,僅通過(guò)enq方法修改添加等待節(jié)點(diǎn)
 */
private transient volatile Node tail;
/**
 * 同步器狀態(tài)
 */
private volatile int state;

CLH隊(duì)列節(jié)點(diǎn)屬性

static final class Node {
    /** 共享鎖標(biāo)記 */
    static final Node SHARED = new Node();
    /** 獨(dú)占鎖標(biāo)記 */
    static final Node EXCLUSIVE = null;
    /** 節(jié)點(diǎn)取消排隊(duì),可能由于超時(shí)或者中斷 */
    static final int CANCELLED =  1;
    /** 當(dāng)前節(jié)點(diǎn)的下個(gè)節(jié)點(diǎn)是阻塞或即將阻塞,當(dāng)節(jié)點(diǎn)釋放鎖或取消時(shí)應(yīng)該喚醒unpark下個(gè)節(jié)點(diǎn) */
    static final int SIGNAL    = -1;
    /** 條件隊(duì)列節(jié)點(diǎn) */
    static final int CONDITION = -2;
    /**
     * 標(biāo)識(shí)下個(gè)節(jié)點(diǎn)無(wú)條件傳播(適用與共享鎖)
     */
    static final int PROPAGATE = -3;
    //節(jié)點(diǎn)等待狀態(tài),0,CANCELLED,SIGNAL,CONDITION,PROPAGATE
    volatile int waitStatus;
    //上個(gè)節(jié)點(diǎn)
    volatile Node prev;
    //下個(gè)節(jié)點(diǎn)
    volatile Node next;
    //節(jié)點(diǎn)線(xiàn)程
    volatile Thread thread;
    /**
     * 共享鎖時(shí)值為 SHARED
     * 條件隊(duì)列時(shí)指向條件隊(duì)列下個(gè)節(jié)點(diǎn)
     */
    Node nextWaiter;

主要流程

核心方法

//判斷當(dāng)前請(qǐng)求是否需要排隊(duì)
public final boolean hasQueuedPredecessors() {
    Node t = tail;//尾節(jié)點(diǎn)
    Node h = head;//頭節(jié)點(diǎn)
    Node s;
    return h != t &&//h==t時(shí)代表沒(méi)有線(xiàn)程排隊(duì),見(jiàn):java.util.concurrent.locks.AbstractQueuedSynchronizer#enq()
        ((s = h.next) == null || s.thread != Thread.currentThread());
        //
        //s.thread != Thread.currentThread() 判斷第一個(gè)排隊(duì)線(xiàn)程是否是當(dāng)前線(xiàn)程
}

以上就是AbstractQueuedSynchronizer(AQS)鎖狀態(tài)同步和排隊(duì)管理的詳細(xì)內(nèi)容,更多關(guān)于AbstractQueuedSynchronizer鎖狀態(tài)管理的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot使用Redis實(shí)現(xiàn)消息隊(duì)列的方法小結(jié)

    SpringBoot使用Redis實(shí)現(xiàn)消息隊(duì)列的方法小結(jié)

    在應(yīng)用中把Redis當(dāng)成消息隊(duì)列來(lái)使用已經(jīng)屢見(jiàn)不鮮了,我想主要原因是當(dāng)代應(yīng)用十有八九都會(huì)用到 Redis,因此不用再引入其他消息隊(duì)列系統(tǒng),而且Redis提供了好幾種實(shí)現(xiàn)消息隊(duì)列的方法,用起來(lái)也簡(jiǎn)單,本文給大家介紹了SpringBoot使用Redis實(shí)現(xiàn)消息隊(duì)列的方法小結(jié)
    2024-04-04
  • Spring?Boot?接口加解密功能實(shí)現(xiàn)

    Spring?Boot?接口加解密功能實(shí)現(xiàn)

    在我們?nèi)粘5腏ava開(kāi)發(fā)中,免不了和其他系統(tǒng)的業(yè)務(wù)交互,或者微服務(wù)之間的接口調(diào)用;如果我們想保證數(shù)據(jù)傳輸?shù)陌踩?,?duì)接口出參加密,入?yún)⒔饷?,這篇文章主要介紹了Spring?Boot?接口加解密功能實(shí)現(xiàn),需要的朋友可以參考下
    2023-04-04
  • Springboot @Validated和@Valid的區(qū)別及使用詳解

    Springboot @Validated和@Valid的區(qū)別及使用詳解

    這篇文章主要介紹了Springboot @Validated和@Valid的區(qū)別及使用詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-05-05
  • 巧用Spring中的@Order進(jìn)行排序

    巧用Spring中的@Order進(jìn)行排序

    這篇文章主要介紹了巧用Spring中的@Order進(jìn)行排序,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • maven私服搭建與使用教程

    maven私服搭建與使用教程

    在使用maven進(jìn)行Java項(xiàng)目的開(kāi)發(fā)過(guò)程中,難免會(huì)有些公共的私有庫(kù),這些庫(kù)是不太方便放到中央倉(cāng)庫(kù)的,可以通過(guò)Nexus搭建一個(gè)私有倉(cāng)庫(kù),這篇文章主要介紹了maven私服搭建與使用,需要的朋友可以參考下
    2023-03-03
  • IDEA中如何去掉Java方法注釋后的空行

    IDEA中如何去掉Java方法注釋后的空行

    本文介紹了如何在IntelliJIDEA中去掉Java方法注釋后多余的空行,并提供了詳細(xì)的操作步驟,通過(guò)修改設(shè)置,可以避免默認(rèn)格式化過(guò)程中自動(dòng)插入的空行,使Javadoc注釋更加緊湊和清晰,符合個(gè)人或團(tuán)隊(duì)的代碼規(guī)范
    2025-02-02
  • SpringBoot3集成ip2region實(shí)現(xiàn)離線(xiàn)IP查詢(xún)方案

    SpringBoot3集成ip2region實(shí)現(xiàn)離線(xiàn)IP查詢(xún)方案

    做后端開(kāi)發(fā),IP歸屬地查詢(xún)絕對(duì)是高頻剛需場(chǎng)景:用戶(hù)訪(fǎng)問(wèn)日志埋點(diǎn)、地域權(quán)限風(fēng)控、用戶(hù)地域畫(huà)像、站點(diǎn)訪(fǎng)問(wèn)統(tǒng)計(jì),幾乎處處都能用得上,本文給大家介紹了如何基于ip2region搭建的離線(xiàn)IP查詢(xún)的方案,需要的朋友可以參考下
    2026-03-03
  • Java 實(shí)戰(zhàn)項(xiàng)目錘煉之校園宿舍管理系統(tǒng)的實(shí)現(xiàn)流程

    Java 實(shí)戰(zhàn)項(xiàng)目錘煉之校園宿舍管理系統(tǒng)的實(shí)現(xiàn)流程

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+javaweb+mysql+ajax實(shí)現(xiàn)一個(gè)校園宿舍管理系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法

    try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法

    這篇文章主要為大家介紹了try-cache-finally讀取文件錯(cuò)誤try-with-resources使用方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • MyBatisPlus的使用最全實(shí)例詳解

    MyBatisPlus的使用最全實(shí)例詳解

    MyBatis-Plus是MyBatis增強(qiáng)工具,簡(jiǎn)化開(kāi)發(fā)并提升效率,內(nèi)置通用Mapper、Service及條件構(gòu)造器,支持動(dòng)態(tài)SQL、分頁(yè)查詢(xún)與注解配置,適用于單表操作,復(fù)雜SQL可手動(dòng)編寫(xiě),減少樣板代碼,優(yōu)化開(kāi)發(fā)體驗(yàn)
    2025-09-09

最新評(píng)論

金昌市| 徐州市| 全南县| 温宿县| 界首市| 两当县| 银川市| 永康市| 浏阳市| 铅山县| 沙田区| 张家川| 邛崃市| 桂东县| 宁安市| 交城县| 博乐市| 潮安县| 五台县| 辽宁省| 庆阳市| 宝兴县| 宁阳县| 青阳县| 河津市| 大洼县| 吉水县| 堆龙德庆县| 金湖县| 平昌县| 贵州省| 镇赉县| 新乡市| 余干县| 永福县| 安丘市| 三亚市| 色达县| 昔阳县| 潼南县| 南溪县|