多線程(九、AQS原理-簡介)

AQS介紹

AQS是一個抽象類,提供了一套通用的控制同步狀態(tài),線程阻塞/喚醒,等待隊列管理的操作。

平時用的ReentrantLock,CountDownLatch,Semaphore(信號量)都是基于AQS提供API來實現(xiàn)的,他們的不同之處就是對于AQS內(nèi)部的同步狀態(tài)(synchronization state,int類型)操作不同,來實現(xiàn)的功能不同。

多線程(九、AQS原理-簡介)

成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,先為恭城等服務建站,恭城等地企業(yè),進行企業(yè)商務咨詢服務。為恭城企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務解決您的所有建站問題。

AQS基于同步狀態(tài)(synchronization state)主要解決了3個問題:

1、資源的訪問是共享的還是獨占的,比方說ReentrantLock是獨占的,ReentrantReadWriteLock.ReadLock是共享的

2、如何管理等待的線程,使用等待隊列

3、無法獲取資源,線程的超時和中斷機制

AQS的主要方法

如何使用同步狀態(tài)(synchronization state)才是繼承AQS的使用者考慮的問題。

AQS暴露給子類可以使用的方法如下:

1、tryAcquire 獨占資源獲取
2、tryRelease 獨占資源釋放
3、tryAcquireShared 共享資源獲取
4、tryReleaseShared 共享資源釋放
5、isHeldExclusively 是否占用獨占資源

AQS框架內(nèi)部通過一個內(nèi)部類ConditionObject,實現(xiàn)了Condition接口,以此來為子類提供條件等待的功能。

多線程(九、AQS原理-簡介)

AQS的內(nèi)部私有方法:

關于同步狀態(tài)(synchronization state)AQS提供了3個方法

1、setState 設置同步狀態(tài)
2、getState 獲取同步狀態(tài)
3、CAS的compareAndSetState 基于unsafe的CAS設置同步狀態(tài)

等待隊列的方法

1、enq 入隊操作指定節(jié)點(后面介紹),可以進行初始化
2、addWaiter 入隊操作節(jié)點,節(jié)點是當前線程
3、setHead 設置頭節(jié)點
4、unparkSuccessor 喚醒當前節(jié)點的后繼節(jié)點
5、doReleaseShared 釋放共享節(jié)點
6、setHeadAndPropagate 設置頭節(jié)點,并依次喚醒后繼節(jié)點

操作資源的方法

1、acquire public final 獨占地獲取資源
2、acquireInterruptibly public final 獨占地獲取資源(響應中斷)
3、acquireInterruptibly public final 獨占地獲取資源(限時等待)
4、acquireShared public final 共享地獲取資源
5、acquireSharedInterruptibly public final 共享地獲取資源(響應中斷)
6、tryAcquireSharedNanos public final 共享地獲取資源(限時等待)
7、等等等........

等待隊列

等待隊列是以節(jié)點(Node)為單位,節(jié)點里包裝了線程。

多線程(九、AQS原理-簡介)

節(jié)點有2種類型,共享節(jié)點和獨占節(jié)點,獨占和共享

多線程(九、AQS原理-簡介)

節(jié)點狀態(tài)(waitStatus),共享節(jié)點和獨占節(jié)點的狀態(tài)使用值是不一樣的。

1、節(jié)點默認狀態(tài)為0。
多線程(九、AQS原理-簡介)
2、其中獨占結(jié)點使用其中的CANCELLED(1)、SIGNAL(-1)、CONDITION(-2),共享結(jié)點使用其中的CANCELLED(1)、SIGNAL(-1)、PROPAGATE(-3)。

網(wǎng)站標題:多線程(九、AQS原理-簡介)
鏈接分享:http://bm7419.com/article18/gegidp.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作網(wǎng)站收錄、網(wǎng)站策劃、移動網(wǎng)站建設、網(wǎng)站內(nèi)鏈、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設