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