1. AbstractQueuedSynchronizer
1.1. 继承关系
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用来实现公平锁和非公平锁,默认是创建的非公平锁。