lock介面和核心方法
lock介面和synchronized的比較
synchronized **簡潔,lock:獲取鎖可以被中斷,超時獲取鎖,嘗試獲取鎖,讀多寫少用讀寫鎖
可重入鎖reentrantlock、所謂鎖的公平和非公平
如果在時間上,先對鎖進行獲取的請求,一定先被滿足,這個鎖就是公平的,不滿足,就是非公平的
非公平的效率一般來講更高
readwritelock介面和讀寫鎖reentrantreadwritelock
reentrantlock和syn關鍵字,都是排他鎖,
讀寫鎖:同一時刻允許多個讀執行緒同時訪問,但是寫執行緒訪問的時候,所有的讀和寫都被阻塞,最適宜與讀多寫少的情況
condition介面
用lock和condition實現等待通知
park開頭的方法
負責阻塞執行緒
unpark(thread thread)方法
負責喚醒執行緒
什麼是aqs?學習它的必要性
aqs使用方式和其中的設計模式
繼承,模板方法設計模式
了解其中的方法
模板方法:
獨佔式獲取
accquire
acquireinterruptibly
tryacquirenanos
共享式獲取
acquireshared
acquiresharedinterruptibly
tryacquiresharednanos
獨佔式釋放鎖
release
共享式釋放鎖
releaseshared
需要子類覆蓋的流程方法
獨佔式獲取 tryacquire
獨佔式釋放 tryrelease
共享式獲取 tryacquireshared
共享式釋放 tryreleaseshared
這個同步器是否處於獨佔模式 isheldexclusively
同步狀態state:
getstate:獲取當前的同步狀態
setstate:設定當前同步狀態
compareandsetstate 使用cas設定狀態,保證狀態設定的原子性
aqs中的資料結構-節點和同步佇列
競爭失敗的執行緒會打包成node放到同步佇列,node可能的狀態裡:
cancelled
:
執行緒等待超時或者被中斷了,需要從佇列中移走
signal
:
後續的節點等待狀態,當前節點,通知後面的節點去執行
condition :當前節點處於等待佇列
propagate
:
共享
,
表示狀態要往後面的節點傳播
表示初始狀態
//todo 未完成...
顯式鎖和AQS
實現鎖的關鍵在於 通過cas操作與volatile變數互相配合,執行緒安全的修改鎖標誌位 基於clh佇列,實現鎖的排隊策略,對於公平鎖,當前執行緒只需要監控他的前驅節點的鎖情況,當前鎖持有這肯定是頭節點 個人理解記錄 reentrantlock基於aqs實現,他的基本原理是aqs的status為0時...
隱式鎖與顯式鎖詳細對比
synchronized修飾的物件,該物件就是隱式鎖,例子如下 public static void main string args static class ticket implements runnable catch interruptedexception e count system....
顯式鎖與隱式鎖的區別
解決的方法 格式描述 同步 塊 關鍵字 synchronized 鎖物件 隱式鎖,多個執行緒的鎖物件必須唯一 同步方法 修飾符 synchronized 返回型別 方法名 隱式鎖,誰呼叫該方法誰就是鎖物件 顯示鎖reentrantlock類的lock unlock 方法 顯式鎖,有程式設計師決定在那...