顯式鎖
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分析
?