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

溫馨提示×

溫馨提示×

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

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

掌握系列之并發編程-5.AQS和ReadWriteLock

發布時間:2020-08-06 12:14:04 來源:網絡 閱讀:151 作者:學習Lr 欄目:編程語言

掌握高并發、高可用架構

第二課 并發編程

從本課開始學習并發編程的內容。主要介紹并發編程的基礎知識、鎖、內存模型、線程池、各種并發容器的使用。

第五節 AQS和ReadWriteLock

并發編程 線程通信 AQS ReadWriteLock Lock

AQS:AbstractQueuedSynchronizer

在同步組件的實現過程中,AQS是核心部分,通過使用AQS的模板方法來實現同步語義。AQS包含同步隊列的定義,以及對同步隊列進行排隊、等待通知等來實現的獨占鎖的獲取和釋放共享鎖的獲取和釋放可中斷鎖超時等待鎖等特性。

同步隊列,即內部類Node
volatile int waitState; // 節點狀態
volatile Node prev; // 當前節點的上一節點
volatile Node next; // 當前節點的下一節點
volatile Thread thread; // Node主體,線程
Node nextWaiter; // 等待隊列中的下一節點

其中,節點狀態的取值范圍為:

int CANCELLED = 1; // 節點從隊列中取消
int INITIAL = 0; // 初始狀態
int SIGNAL = -1; // 下一節點處于等待狀態,當當前線程釋放鎖后會通知下一節點,使其進入執行狀態
int CONDITION = -2; // 當前節點進入等待狀態
int PROPAGATE = -3; // 表示下一次共享狀態獲取將會無條件傳播下去

顯然,同步隊列是一個雙向鏈表。

另外,AQS中有兩個很重要的變量:同步隊列的頭尾節點。

private transient volatile Node head;
private transient volatile Node tail;

AQS通過頭尾指針來管理同步隊列,同時實現包括獲取鎖失敗的線程進入隊列、釋放鎖時對同步隊列進行通知等核心功能。

獨占鎖
void acquire(int arg); //獨占式獲取同步鎖,如果獲取失敗則插入同步隊列進行等待
void acquireInterruptibly(int arg); //與acquire相同,但在同步隊列等待過程中可響應中斷
boolean tryAcquireNanos(int arg, long nanos); //在acquireInterruptibly的基礎上增加了超時等待的功能,在超時時間內沒有獲取到同步鎖則返回false
boolean release(int arg); //釋放鎖,該方法會喚醒同步隊列中的下一個節點
共享鎖
void acquireShared(int arg); //共享式獲取同步鎖,與獨占鎖的區別是同一時刻可以有多個線程獲取到同步狀態
void acquireSharedInterruptibly(int arg); //在acquireShared基礎上增加了響應中斷的功能
boolean tryAcquireSharedNanos(int arg, long nanos); //在acquireSharedInterruptibly的基礎上增加了超時等待的功能
boolean releaseShared(int arg); //釋放共享式鎖
向AI問一下細節

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

AI

集安市| 黄石市| 西乌珠穆沁旗| 建水县| 长治县| 和平县| 韶关市| 宣恩县| 麻城市| 宁波市| 奈曼旗| 花莲市| 敦煌市| 昭平县| 云霄县| 塔城市| 墨竹工卡县| 秦皇岛市| 甘南县| 郓城县| 泰宁县| 洪泽县| 三门峡市| 萨嘎县| 游戏| 孙吴县| 玉环县| 且末县| 大城县| 莱阳市| 满城县| 吉安市| 石狮市| 十堰市| 常州市| 平遥县| 如东县| 民勤县| 武隆县| 哈尔滨市| 若羌县|