91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2020-07-25 13:21:03 來源:網絡 閱讀:345 作者:shayang88 欄目:編程語言

AQS介紹

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

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

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

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

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

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

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

AQS的主要方法

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

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

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

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

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

AQS的內部私有方法:

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

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

等待隊列的方法

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

操作資源的方法

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、等等等........

等待隊列

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

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

節點有2種類型,共享節點和獨占節點,獨占和共享

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

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

聂拉木县| 南澳县| 利川市| 措美县| 宝丰县| 翁源县| 团风县| 无棣县| 南充市| 易门县| 同德县| 山阳县| 平南县| 谷城县| 沧州市| 远安县| 建水县| 宁安市| 会泽县| 都安| 盱眙县| 蕉岭县| 江安县| 新晃| 介休市| 阿巴嘎旗| 法库县| 绥中县| 丰镇市| 西乌| 措美县| 吉安市| 松溪县| 景谷| 珠海市| 禹州市| 宝应县| 乌鲁木齐市| 平乐县| 大连市| 铜鼓县|