AQS全称是AbstractOwnableSynchronizer,是用来构建锁或者其它同步器组件的重量级基础框架及整个JUC体系的基石, 通过内置的FIFO队列来完成资源获取线程的排队工作,并通过一个int类变量表示持有锁的状态
下面主要演示一下根据源代码梳理的操作流程图,核心东西都在图里了就不再过多文字描述。
获取锁过程

下一步开始acquireQueued操作,这个方法中用了一个CAS去无线循环获取锁,其中用了LockSupport.park()进行等待唤醒。


其中有两个操作的方法细节如下
解锁过程


上面就是解锁的过程了,下面是tryRelease的实现
尝试解锁并判断解锁状态 tryRelease

Java源注解是这么说的
A synchronizer that may be exclusively owned by a thread. This class provides a basis for creating locks and related synchronizers that may entail a notion of ownership. The AbstractOwnableSynchronizer class itself does not manage or use this information. However, subclasses and tools may use appropriately maintained values to help control and monitor access and provide diagnostics.
自从:
1.6
作者:Doug Lea