您好,登錄后才能下訂單哦!
從本課開(kāi)始學(xué)習(xí)并發(fā)編程的內(nèi)容。主要介紹并發(fā)編程的基礎(chǔ)知識(shí)、鎖、內(nèi)存模型、線程池、各種并發(fā)容器的使用。
并發(fā)編程
線程通信
AQS
ReadWriteLock
Lock
在同步組件的實(shí)現(xiàn)過(guò)程中,AQS是核心部分,通過(guò)使用AQS的模板方法來(lái)實(shí)現(xiàn)同步語(yǔ)義。AQS包含同步隊(duì)列的定義,以及對(duì)同步隊(duì)列進(jìn)行排隊(duì)、等待通知等來(lái)實(shí)現(xiàn)的獨(dú)占鎖的獲取和釋放;共享鎖的獲取和釋放;可中斷鎖;超時(shí)等待鎖等特性。
volatile int waitState; // 節(jié)點(diǎn)狀態(tài)
volatile Node prev; // 當(dāng)前節(jié)點(diǎn)的上一節(jié)點(diǎn)
volatile Node next; // 當(dāng)前節(jié)點(diǎn)的下一節(jié)點(diǎn)
volatile Thread thread; // Node主體,線程
Node nextWaiter; // 等待隊(duì)列中的下一節(jié)點(diǎn)
其中,節(jié)點(diǎn)狀態(tài)的取值范圍為:
int CANCELLED = 1; // 節(jié)點(diǎn)從隊(duì)列中取消
int INITIAL = 0; // 初始狀態(tài)
int SIGNAL = -1; // 下一節(jié)點(diǎn)處于等待狀態(tài),當(dāng)當(dāng)前線程釋放鎖后會(huì)通知下一節(jié)點(diǎn),使其進(jìn)入執(zhí)行狀態(tài)
int CONDITION = -2; // 當(dāng)前節(jié)點(diǎn)進(jìn)入等待狀態(tài)
int PROPAGATE = -3; // 表示下一次共享狀態(tài)獲取將會(huì)無(wú)條件傳播下去
顯然,同步隊(duì)列是一個(gè)雙向鏈表。
另外,AQS中有兩個(gè)很重要的變量:同步隊(duì)列的頭尾節(jié)點(diǎn)。
private transient volatile Node head;
private transient volatile Node tail;
AQS通過(guò)頭尾指針來(lái)管理同步隊(duì)列,同時(shí)實(shí)現(xiàn)包括獲取鎖失敗的線程進(jìn)入隊(duì)列、釋放鎖時(shí)對(duì)同步隊(duì)列進(jìn)行通知等核心功能。
void acquire(int arg); //獨(dú)占式獲取同步鎖,如果獲取失敗則插入同步隊(duì)列進(jìn)行等待
void acquireInterruptibly(int arg); //與acquire相同,但在同步隊(duì)列等待過(guò)程中可響應(yīng)中斷
boolean tryAcquireNanos(int arg, long nanos); //在acquireInterruptibly的基礎(chǔ)上增加了超時(shí)等待的功能,在超時(shí)時(shí)間內(nèi)沒(méi)有獲取到同步鎖則返回false
boolean release(int arg); //釋放鎖,該方法會(huì)喚醒同步隊(duì)列中的下一個(gè)節(jié)點(diǎn)
void acquireShared(int arg); //共享式獲取同步鎖,與獨(dú)占鎖的區(qū)別是同一時(shí)刻可以有多個(gè)線程獲取到同步狀態(tài)
void acquireSharedInterruptibly(int arg); //在acquireShared基礎(chǔ)上增加了響應(yīng)中斷的功能
boolean tryAcquireSharedNanos(int arg, long nanos); //在acquireSharedInterruptibly的基礎(chǔ)上增加了超時(shí)等待的功能
boolean releaseShared(int arg); //釋放共享式鎖
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。