目录
AQS是AbstractQueuedSynchronizer的缩写,它提供一个框架,用于实现依赖于先进先出(FIFO)等待队列的阻塞锁和相关的同步器(信号灯,事件等)。 此类旨在为大多数依赖单个原子{@code int}值表示状态的同步器提供有用的基础。 子类必须定义更改此状态的受保护方法,并定义该状态对于获取或释放此对象而言意味着什么。 鉴于这些,此类中的其他方法将执行所有排队和阻塞机制。 子类可以维护其他状态字段,但仅跟踪使用方法{@link #getState},{@ link #setState}和{@link #compareAndSetState}进行原子更新的{@code int}值的同步性。
AQS有很多具体的实现子类,比如ReentranLock、CountDownLatch、CyclicBarrier、Semaphore等核心都依赖AQS类实现。
(1)ReentranLock与AQS的关系
拿ReentranLock来说,其主要代码逻辑是依靠其内部抽象类Sync具体实现。Sync是AbstractQueuedSynchronizer的子类。
abstract static class Sync extends AbstractQueuedSynchronizer
而Sync抽象类又有两个实现子类FairSync和NonfairSync。
(2)动态调试ReentranLock程序的加锁调用过程
之前我们用ReentranLock实现了一个固定容量的容器,实现生产者和消费者的模型。