首页IT科技java面试必备八股文(Java多线程(6):锁与AQS(中))

java面试必备八股文(Java多线程(6):锁与AQS(中))

时间2025-08-05 09:06:37分类IT科技浏览6030
导读:您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~...

您好                 ,我是湘王                         ,这是我的博客园        ,欢迎您来        ,欢迎您再来~

Java中的AQS(AbstractQueuedSynchronizer                         ,抽象队列同步器)是用来实现锁及其他同步功能组件的Java底层技术基础                ,java.util.concurrent包下大部分类的实现都离不开它                 。

通过继承AQS:

1                 、ReentrantLock的内部类实现了公平锁和非公平锁;

2                         、CountDownLatch的内部类实现了发令枪;

3        、ReentrantReadWriteLock的内部类实现了独享锁和共享锁;

4        、Semaphore的内部类实现了公平锁和非公平锁                         。

AQS主要实现两大功能:独占(Exclusive        ,有时也叫排他)和共享(Share)        。

AQS在内部维护一个FIFO(First In First Out                         ,先进先出)的CLH(Craig                ,Landin,and Hagersten)线程阻塞队列和一个资源同步状态的变量volatile int state        。

CLH是一个虚拟的双向队列                         ,也就是不存在队列实例                        ,仅存在节点之间的关联关系的队列                         。AQS是将每一条请求共享资源的线程,封装成一个CLH线程队列节点(Node)                 ,从而实现锁的分配                。因此                        ,说了一大堆        ,用一句简单的话来形容AQS就是:基于CLH线程阻塞队列                 ,通过volatile变量 + CAS + 自旋方式来改变线程状态                         ,成功则获取锁        ,失败则进入CLH队列        。

AQS已经实现了CLH线程阻塞队列的维护        ,所以一般子类自定义实现AQS                         ,要么是独占                ,要么是共享        ,也就是要么实现tryAcquire()tryRelease()等系列方法                         ,要么实现tryAcquireShared()tryReleaseShared()等系列方法                         。

CLH队列由多个node节点组成                ,而且大量使用“CAS自旋volatile变量                ”这种经典代码:

CLH队列的结构为:

CLH设置首节点:

CLH设置尾节点:

整个AQS的流程如图:

AQS特别复杂,如果想把多线程搞透的                         ,就需要深入研究每个方法的流程                        ,acquire(int)方法的执行流程为例:

我把AQS的源码做了较为详细的注释,可以结合注释看看                。例如:

如果只是了解多线程的简单用法                 ,AQS可以绕过。

感谢您的大驾光临!咨询技术                         、产品                、运营和管理相关问题                        ,请关注后留言                         。欢迎骚扰        ,不胜荣幸~

声明:本站所有文章                 ,如无特殊说明或标注                         ,均为本站原创发布                        。任何个人或组织        ,在未征得本站同意时        ,禁止复制        、盗用                         、采集                、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益                         ,可联系我们进行处理                 。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
运营网页需要什么(网站运营多少钱)