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

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

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

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

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
pcm彩涂板好还是钢板好(pccardctl命令 – PCMCIA卡控制工具)