solitaryclown

AQS

2021-12-31
solitaryclown

1. AbstractQueuedSynchronizer

1.1. 继承关系

T4lkaF.png

1.2. 源码类注释

AbstractQueuedSynchronizer是一个用来实现阻塞式锁和相关同步器(Samephore,events等等)的一个框架。

1.3. 使用

如果自定义锁要使用AQS作为同步器,需要让同步器继承并重写AQS的5个方法:

  • {@link #tryAcquire}
  • {@link #tryRelease}
  • {@link #isHeldExclusively}
  • {@link #tryAcquireShared}
  • {@link #tryReleaseShared}
    protected boolean tryAcquire(int arg) {
        throw new UnsupportedOperationException();
    }
    protected boolean tryRelease(int arg) {
        throw new UnsupportedOperationException();
    }
    protected int tryAcquireShared(int arg) {
        throw new UnsupportedOperationException();
    }
    protected boolean tryReleaseShared(int arg) {
        throw new UnsupportedOperationException();
    }    
    protected boolean isHeldExclusively() {
        throw new UnsupportedOperationException();
    }

1.4. ReentrantLock和AQS

ReentrantLock使用了AQS作为自己的同步器,具体是创建一个Sync继承自AQS,并由Sync发展FairSync和NonfairSync用来实现公平锁和非公平锁,默认是创建的非公平锁。


上一篇 Forkjoinpool

Comments

Content