顯式鎖和AQS

2021-09-28 18:00:07 字數 1802 閱讀 3566

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 方法 顯式鎖,有程式設計師決定在那...