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

溫馨提示×

溫馨提示×

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

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

掌握系列之并發編程-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

乐亭县| 肃宁县| 印江| 托里县| 方正县| 平顶山市| 仪征市| 浙江省| 玉门市| 新民市| 久治县| 武汉市| 渭源县| 邢台市| 松滋市| 西畴县| 扎兰屯市| 徐闻县| 赫章县| 开阳县| 镇安县| 凤台县| 哈尔滨市| 南澳县| 达日县| 墨竹工卡县| 修文县| 乐安县| 庆云县| 河间市| 丹寨县| 武汉市| 九龙县| 仲巴县| 北流市| 阳原县| 商都县| 营山县| 准格尔旗| 宜都市| 肇东市|