浅析CountDownLatch闭锁底层实现原理

浅析CountDownLatch闭锁底层实现原理_第1张图片

CountDownLatch是基于AQS同步器的一种同步工具,它可以让一个或多个线程等待,一直等到其他线程完成一组工作,它是AQS共享模式的实现。

它的使用方式如下:
浅析CountDownLatch闭锁底层实现原理_第2张图片
查看它的内部实现,它的设计模型和ReentrantLock类似,都是内部定义了一个Sync继承了AQS同步器。而且CountDownLatch内部并没有太多的方法。
浅析CountDownLatch闭锁底层实现原理_第3张图片
首先查看它的构造方法,如果了解过ReentranLock的实现,那么你就会很熟悉了,老一套。
浅析CountDownLatch闭锁底层实现原理_第4张图片
✨与ReentrantLock中的Sync不同的是,它们虽然都是继承了AQS抽象类,但是ReentrantLock中的Sync是一个抽象类,还需要FairSync和NonfairSync继续继承Sync来完成公平锁和非公平锁的设计;注意CountDownLatch并没有实现Lock接口,因为CountDownLatch本质上是一个计数器,不需要获取锁和释放锁等操作。

✨查看它的计数器减1方法
在这里插入图片描述
浅析CountDownLatch闭锁底层实现原理_第5张图片
浅析CountDownLatch闭锁底层实现原理_第6张图片

✨查看await()方法
在这里插入图片描述
浅析CountDownLatch闭锁底层实现原理_第7张图片
它定义tryAcquireShared(arg)<0是用来判断state是否等于0,看下面就明白了
在这里插入图片描述

(1)深入HotSpot虚拟机源码探究synchronized底层实现原理【万字总结synchronized】:https://blog.csdn.net/Kevinnsm/article/details/124688097
(2)一文彻底搞懂ReentrantLock原理【基于AQS的公平锁+非公平锁】:https://blog.csdn.net/Kevinnsm/article/details/124801690?spm=1001.2014.3001.5502

你可能感兴趣的:(多线程&高并发,Java,java,CountDownLatch)