AQS

JDK中许多并发工具类的内部实现都依赖于AQS,如ReentrantLock, Semaphore, CountDownLatch等。
AQS底层依靠CAS与同步队列。

AbstractQueuedSynchronizer(队列同步器)

volatile int state; 
  • 一个保证可见性的参数
  • 由于AbstractQueuedSynchronizer是一个抽象类并没有规定state的具体业务含义
  • state 的含义 由各个实现了队列的实现类自行定义。
public class Node{
volatile Thread thread; //线程
volatile Node prev; //上一个元素
volatile Node next; //下一个元素
volatile int waitStatus; //状态
}
  • 其实队列容器中会存在一个LinkedList<Node>
  • 每个node里都会包含他的上一个元素,下一个元素,线程执行状态,类似一个线程池的概念