抽象队列同步器,是一系列同步实现的模板类,如锁Lock,信号量Semaphore,倒排计数器CoundDownLatch等都是基于AQS实现的,同时还提供了Condition对象,其await和sign、signAll对象可以用于代替Object的wait和notofy、notifyAll方法。
CLH队列是是一种先进先出FIFO的双向队列,AQS对其实现微调,但原理不变,用于实现同步阻塞。
AQS中实际上包括两个队列,同步队列用于排斥锁和共享锁,条件队列用于Condition对象的等待和唤醒。
用于定义CLH队列中的节点
volatile int waitStatus;
volatile Node prev;
volatile Node next;
volatile Thread thread;
Node nextWaiter;
static final class Node {}
//头节点,指向队列中第一个节点。实际使用过程中要么是初始化的节点,要么代表最后一个获取资源成功的节点
private transient volatile Node head;
//尾节点,指向队列中最后一个节点
private transient volatile Node tail;
//状态,实际使用中可以表示资源数或者获取资源成功的线程、锁重入次数等等
private volatile int state;