【java】抽象同期キューAQS
1、抽象同期キューとは?
2、AQS核心思想
3、CLHキュー
4、AQS構造
4.1、
4.2、ノード構造 Nodeのthread変数は、AQSキューに入るスレッドを格納するために使用されます. SHAREDは、このスレッドが共有リソースを取得したときにブロックされて停止した後にAQSキューに入れられたことをマークするために使用される. EXCLUSIVEは、このスレッドが独占リソースを取得したときに保留されてAQSキューに入れられたことをマークするために使用される. waitStatusは、現在のスレッド待ち状態を記録します.a.CNCELLED:スレッドがキャンセルされました.b.SIGNAL:スレッドを起動する必要があります.c.CONDITION:スレッドは条件キューで待機します.d.PROPAGATE:共有リソースを解放する場合は、他のノードに通知する必要があります. preは現在のノードの前駆ノードを記録し、nextは現在のノードの後続ノードを記録する.
4.3、AQSでは単一の状態情報stateを維持し、getState()、setState()およびcompareAndSetState()で値を変更できます. ReentrantLockの場合、stateは現在のスレッドがロックを取得する再入力可能な回数を表す. ReentrantReadWriteLockでは、stateの高さ16ビットがリード状態、すなわち、このリードロックを取得した回数を表す.ロー16ビットは、書き込みロックを取得したスレッドの再入力可能回数を示す. Semaphoneの場合、stateは現在利用可能な信号の個数を表す. CountDownLatchの場合、stateはカウンタの現在の値を表すために使用されます.
4.4、内部クラスConditionObject
5、シンクロナイザの設計はテンプレート方法モードに基づく
AQS(AbstractQueueSynchronized) , (J.U.C)
AQS 。
2、AQS核心思想
AQS , , ,
。 , ,
CLH AQS, , 。
3、CLHキュー
CLH(Craig,Landin,and Hagersten) ( ,
)。AQS CLH (node)
。
4、AQS構造
4.1、
AQS FIFO CLH , head tail , Node。
4.2、ノード構造
4.3、AQSでは単一の状態情報stateを維持し、getState()、setState()およびcompareAndSetState()で値を変更できます.
4.4、内部クラスConditionObject
AQS ConditionObject, 。ConditionObject
AQS , state AQS 。
ConditionObject , ( ),
await 。
5、シンクロナイザの設計はテンプレート方法モードに基づく
AQS , : , ( ), , 。
AQS : tryAcquire( )、tryRelease( )、tryAcquireShared( )、tryReleaseShared( )、isHeldExclusively( )。