掌握系列之并發(fā)編程-5.AQS和ReadWriteLock

掌握高并發(fā)、高可用架構(gòu)

第二課 并發(fā)編程

從本課開始學(xué)習(xí)并發(fā)編程的內(nèi)容。主要介紹并發(fā)編程的基礎(chǔ)知識、鎖、內(nèi)存模型、線程池、各種并發(fā)容器的使用。

成都創(chuàng)新互聯(lián)公司擁有10余年的建站服務(wù)經(jīng)驗,在此期間,我們發(fā)現(xiàn)較多的客戶在挑選建站服務(wù)商前都非常的猶豫。主要問題集中:在無法預(yù)知自己的網(wǎng)站呈現(xiàn)的效果是什么樣的?也無法判斷選擇的服務(wù)商設(shè)計出來的網(wǎng)頁效果自己是否會滿意?成都創(chuàng)新互聯(lián)公司業(yè)務(wù)涵蓋了互聯(lián)網(wǎng)平臺網(wǎng)站建設(shè)、移動平臺網(wǎng)站制作、網(wǎng)絡(luò)推廣、按需網(wǎng)站策劃等服務(wù)。成都創(chuàng)新互聯(lián)公司網(wǎng)站開發(fā)公司本著不拘一格的網(wǎng)站視覺設(shè)計和網(wǎng)站開發(fā)技術(shù)相結(jié)合,為企業(yè)做網(wǎng)站提供成熟的網(wǎng)站設(shè)計方案。

第五節(jié) AQS和ReadWriteLock

并發(fā)編程 線程通信 AQS ReadWriteLock Lock

AQS:AbstractQueuedSynchronizer

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

同步隊列,即內(nèi)部類Node
volatile int waitState; // 節(jié)點狀態(tài)
volatile Node prev; // 當(dāng)前節(jié)點的上一節(jié)點
volatile Node next; // 當(dāng)前節(jié)點的下一節(jié)點
volatile Thread thread; // Node主體,線程
Node nextWaiter; // 等待隊列中的下一節(jié)點

其中,節(jié)點狀態(tài)的取值范圍為:

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

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

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

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

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

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

網(wǎng)站題目:掌握系列之并發(fā)編程-5.AQS和ReadWriteLock
路徑分享:http://bm7419.com/article32/psoipc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供建站公司、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站設(shè)計網(wǎng)頁設(shè)計公司、用戶體驗、網(wǎng)站導(dǎo)航

廣告

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

外貿(mào)網(wǎng)站建設(shè)