亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

AbstractQueuedSynchronizer

AbstractQueuedSynchronizer簡稱AQS,ReentrantLock,ReentrantReadWriteLock,CountDownLatch,Semaphore等等這些鎖都是基于AQS實現(xiàn)的。

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

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

主要屬性

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

CLH隊列節(jié)點屬性

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

主要流程

核心方法

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

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

相關(guān)文章

最新評論