🚀 优质资源分享 🚀
什么是AbstractQueuedSynchronizer(AQS)
字面意思是抽象队列同步器
,使用一个voliate
修饰的int类型
的同步状态
,通过一个FIFO队列
完成资源获取的排队工作,把每个参与资源竞争的线程封装成一个Node节点
来实现锁的分配。
AbstractQueuedSynchronizer源码
public abstract class AbstractQueuedSynchronizer
extends AbstractOwnableSynchronizer
implements java.io.Serializable {
private transient volatile Node head;//链表头
private transient volatile Node tail;//链表尾
private transient Thread exclusiveOwnerThread;//持有锁的线程
private volatile int state;//同步状态,0表示当前没有线程获取到锁
static final class Node {//链表的Node节点类
volatile int waitStatus;//当前节点在队列中的状态
volatile Node prev;//前置节点
volatile Node next;//后置节点
volatile Thread thread;//当前线程
}
}
AQS同步队列的基本结构

Node.waitStatus的说明
状态值 |
描述 |
0 |
节点默认的初始值 |
SIGNAL=-1 |
线程已经准备好,等待释放资源 |
CANCELLED=1 |
获取锁的请求线程被取消 |
CONDITION=-2 |
节点在队列中,等待唤醒 |