CountDownLatch是基于AQS同步器的一种同步工具,它可以让一个或多个线程等待,一直等到其他线程完成一组工作,它是AQS共享模式的实现。
它的使用方式如下:
查看它的内部实现,它的设计模型和ReentrantLock类似,都是内部定义了一个Sync继承了AQS同步器。而且CountDownLatch内部并没有太多的方法。
首先查看它的构造方法,如果了解过ReentranLock的实现,那么你就会很熟悉了,老一套。
✨与ReentrantLock中的Sync不同的是,它们虽然都是继承了AQS抽象类,但是ReentrantLock中的Sync是一个抽象类,还需要FairSync和NonfairSync继续继承Sync来完成公平锁和非公平锁的设计;注意CountDownLatch并没有实现Lock接口,因为CountDownLatch本质上是一个计数器,不需要获取锁和释放锁等操作。
✨查看await()方法
它定义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