中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

多線程(九、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

汶川县| 江油市| 桐乡市| 公安县| 永仁县| 松溪县| 依兰县| 镇康县| 嘉善县| 贵德县| 政和县| 敦煌市| 大丰市| 西峡县| 甘孜| 靖宇县| 通城县| 吐鲁番市| 辽源市| 荣昌县| 资阳市| 乐业县| 隆昌县| 陆川县| 河源市| 长乐市| 汤原县| 文安县| 麦盖提县| 墨江| 连平县| 阜宁县| 南郑县| 偃师市| 台中市| 英吉沙县| 石阡县| 肇东市| 屯门区| 滁州市| 中方县|