同步器的設計是基於模板方法模式的,也就是說,使用者需要繼承同步器並重寫指定的方法,隨後將同步器組合在自定義同步元件的實現中,並呼叫同步器提供的模板方法,而這些模板方法將會呼叫使用者重寫的方法。
重寫同步器指定的方法時,需要使用同步器提供的如下3個方法來訪問或修改同步狀態。
同步器可重寫的方法與描述如表:
實現自定義同步元件時,將會呼叫同步器提供的模板方法,這些(部分)模板方法與描述如表:
同步器提供的模板方法基本上分為3類:獨佔式獲取與釋放同步狀態、共享式獲取與釋放同步狀態和查詢同步佇列中的等待執行緒情況。自定義同步元件將使用同步器提供的模板方法來實現自己的同步語義。
獨佔鎖示例:
class
mutex
implements
lock
// 當狀態為0的時候獲取鎖
public
boolean
tryacquire
(int acquires)
return
false;}
// 釋放鎖,將狀態設定為0
protected
boolean
tryrelease
(int releases)
// 返回乙個condition,每個condition都包含了乙個condition佇列
condition newcondition()
}// 僅需要將操作**到sync上即可
AQS共享鎖應用之Semaphore原理
我們呼叫semaphore方法時,其實是在間接呼叫其內部類或aqs方法執行的。semaphore類結構與reetrantlock類相似,內部類sync繼承自aqs,然後其子類fairsync和nofairsync分別實現公平鎖和非公平鎖的獲取鎖方法tryacquireshared int arg 而...
AQS框架 談談對AQS框架的理解
aqs是乙個框架,基於它我們可以實現鎖和同步器,j.u.c.包中和很多鎖和同步器都是基於aqs實現的。使用aqs的方式通常不是讓鎖或同步器直接繼承aqs類,而是將aqs的子類作為鎖或同步器類的乙個輔助內部類,鎖或同步器的方法呼叫aqs子類物件的方法完成同步操作。來自網路 aqs中最重要的乙個字段就是...
AQS研究整理
aqs是 abstractqueuedsynchronizer 的簡稱,字面含義可以解釋為抽象同步佇列。處理併發中的資源分配協調問題 狀態state,為volatile關鍵字修飾哦 佇列node,aqs是存在乙個head,和乙個tail cas 保證狀態的變更在多執行緒中的可見性 狀態,獨佔模式 0...