AQS
抽象同步队列简称AQS,它是一个先进先出的双向队列。AQS内部有一个CLH队列,用来记录所有等待锁的线程。AQS还拥有一个内部类ConditionObject,它是条件变量,每个条件变量的内部都维护了一个条件队列,当一个线程调用条件变量的await方法时,该线程会释放它持有的锁,并被转换为Node节点插入到条件变量对应的条件队列里,同时还会唤醒CLH队列里的一个线程获取到被释放的锁。而signal系列的方法会将condition条件队列中的节点插入到CLH队列里,等待时机获取锁。
AQS的应用
AQS支持独占锁,比如ReentranLock。还支持共享锁,比如CountDownLatch、Semaphore。在AQS中维持了一个单一的状态信息state,对于ReentranLock,state表示当前线程获取锁的可重入次数;对于CountDownLatch,state表示当前计数器的值;对于Semaphore,state表示当前可用信号的个数。
来源:https://blog.csdn.net/dl674756321/article/details/100536639