首先我們從java.util.concurrent.locks包中的AbstraceQueuedSynchronizer說起,在下文中稱為AQS。

  AQS是一個用于構(gòu)建鎖和同步器的框架。例如在并發(fā)包中的ReentrantLock、Semaphore、CountDownLatch、ReentrantReadWriteLock等都是基于AOS構(gòu)建,這些鎖都有一個特點,都不是直接擴展自AQS,而是都有一個內(nèi)部類繼承自AQS。為什么會這么設(shè)計而不是直接繼承呢?簡而言之,鎖面向的是使用者,同步器面向的是線程控制,在鎖的實現(xiàn)中聚合同步器而不是直接繼承AQS很好的隔離了二者所關(guān)注的領(lǐng)域。

  AbstractQueuedSynchronizer在內(nèi)部依賴一個雙向同步隊列來完成同步狀態(tài)的管理,當(dāng)前線程獲取同步狀態(tài)失敗時,同步器會將該線程和等待狀態(tài)信息構(gòu)造成一個節(jié)點并將其加入到同步隊列中。Node節(jié)點以AQS的內(nèi)部類存在,其字段屬性如下:

<menu id="qqvm2"><abbr id="qqvm2"><center id="qqvm2"></center></abbr></menu><thead id="qqvm2"></thead>
  • AbstractQueuedSynchronizer$Node

    屬性

    描述

    volatile int waitStatus

    等待狀態(tài),并不是同步狀態(tài),而是在隊列中的線程節(jié)點等待狀態(tài)(Node節(jié)點中一共定義四種狀態(tài))

    CANCELLED = 1    //線程由于超時或被中斷會被取消在隊列中的等待,被取消了的線程不會再被阻塞,即狀態(tài)不會再改變

    SIGNAL = -1    //后繼節(jié)點處于等待狀態(tài),當(dāng)前節(jié)點釋放鎖或者取消等待時會通知后繼節(jié)點

    CONDITION = -2    //暫時忽略,涉及Condition

    延伸閱讀

    學(xué)習(xí)是年輕人改變自己的最好方式-Java培訓(xùn),做最負責(zé)任的教育,學(xué)習(xí)改變命運,軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動軟件開發(fā)培訓(xùn),網(wǎng)站設(shè)計培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式

    我想了解如何學(xué)習(xí)

    姓名:
    手機:
    留言: