浅析CountDownLatch闭锁底层实现原理
Posted 漫话人生
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了浅析CountDownLatch闭锁底层实现原理相关的知识,希望对你有一定的参考价值。
🍀CountDownLatch是基于AQS同步器的一种同步工具,它可以让一个或多个线程等待,一直等到其他线程完成一组工作,它是AQS共享模式的实现。
它的使用方式如下:
查看它的内部实现,它的设计模型和ReentrantLock类似,都是内部定义了一个Sync继承了AQS同步器。而且CountDownLatch内部并没有太多的方法。
首先查看它的构造方法,如果了解过ReentranLock的实现,那么你就会很熟悉了,老一套。
✨与ReentrantLock中的Sync不同的是,它们虽然都是继承了AQS抽象类,但是ReentrantLock中的Sync是一个抽象类,还需要FairSync和NonfairSync继续继承Sync来完成公平锁和非公平锁的设计;注意CountDownLatch并没有实现Lock接口,因为CountDownLatch本质上是一个计数器,不需要获取锁和释放锁等操作。
✨查看它的计数器减1方法
✨查看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
以上是关于浅析CountDownLatch闭锁底层实现原理的主要内容,如果未能解决你的问题,请参考以下文章
Java并发编程原理与实战二十六:闭锁 CountDownLatch
Juc21_强大的三个工具类CountDownLatch 闭锁 CyclicBarrier Semaphore
并发包下常见的同步工具类详解(CountDownLatch,CyclicBarrier,Semaphore)