面试题——AQS

你说的曾经没有我的故事 提交于 2019-11-29 06:16:54

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表示当前可用信号的个数。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!