顯式鎖和AQS

顯式鎖

Lock接口和核心方法


Lock接口和synchronized的比較

synchronized代碼簡潔,Lock:獲取鎖可以被中斷,超時獲取鎖,嘗試獲取鎖,讀多寫少用讀寫鎖

可重入鎖ReentrantLock、所謂鎖的公平和非公平

如果在時間上,先對鎖進行獲取的請求,一定先被滿足,這個鎖就是公平的,不滿足,就是非公平的

非公平的效率一般來講更高

ReadWriteLock接口和讀寫鎖ReentrantReadWriteLock

ReentrantLock和Syn關(guān)鍵字,都是排他鎖,

讀寫鎖:同一時刻允許多個讀線程同時訪問,但是寫線程訪問的時候,所有的讀和寫都被阻塞,最適宜與讀多寫少的情況

Condition接口


用Lock和Condition實現(xiàn)等待通知


了解LockSupport工具


park開頭的方法

負責阻塞線程

unpark(Thread

thread)方法

負責喚醒線程

AbstractQueuedSynchronizer深入分析

什么是AQS?學習它的必要性

AQS使用方式和其中的設(shè)計模式

繼承,模板方法設(shè)計模式

了解其中的方法

模板方法:

獨占式獲取

accquire

acquireInterruptibly

tryAcquireNanos

共享式獲取

acquireShared

acquireSharedInterruptibly

tryAcquireSharedNanos

獨占式釋放鎖

release

共享式釋放鎖

releaseShared

需要子類覆蓋的流程方法

獨占式獲取? tryAcquire

獨占式釋放? tryRelease

共享式獲取tryAcquireShared

共享式釋放? tryReleaseShared

這個同步器是否處于獨占模式? isHeldExclusively


同步狀態(tài)state:

getState:獲取當前的同步狀態(tài)

setState:設(shè)置當前同步狀態(tài)

compareAndSetState 使用CAS設(shè)置狀態(tài),保證狀態(tài)設(shè)置的原子性

AQS中的數(shù)據(jù)結(jié)構(gòu)-節(jié)點和同步隊列

競爭失敗的線程會打包成Node放到同步隊列,Node可能的狀態(tài)里:

CANCELLED線程等待超時或者被中斷了,需要從隊列中移走

SIGNAL后續(xù)的節(jié)點等待狀態(tài),當前節(jié)點,通知后面的節(jié)點去運行

CONDITION :當前節(jié)點處于等待隊列

PROPAGATE:共享,表示狀態(tài)要往后面的節(jié)點傳播

[if !supportLists]0,? [endif]表示初始狀態(tài)


節(jié)點在同步隊列中的增加和移出


獨占式同步狀態(tài)獲取與釋放

[if !vml]

[endif]

其他同步狀態(tài)獲取與釋放


Condition分析

?

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內(nèi)容