Reentrant Lockの原理
1355 ワード
Reentrant Lockの原理
ReentrantLock AQS
AQSアーキテクチャAQS state FIFO 。 FIFO Node
AQS 2 : 。
AQS tryAcquireShared-tryReleaseShared
AQS tryAcquire-tryRelease
AQS acuqire方法 tryAcquire(int) return; , 。 ,
, , , , , selfInterrupt ,
, <=0 LockSupport.park
AQS release方法 tryRelease(int) , , LockSupport.unpark 。
AQS acquire Shared方法 tryAcquireShared(int) <0, <0 , 。
, , >=0 , , ,
, selfInterrupt , 。 , <=0
LockSupport.park 。
AQS release Shared方法 tryReleaseShared(int) , , , LockSupport.unpark
。
Reentrant Lockはカスタム同期を実現します。reentrantLock:
1. lock acquire(1),tryAcquire state 0 0, CAS , true。 state 0 , state + 1 true
2. unlock release(1), , ,tryRelease state -1, state 0, false, 0, null, true