浅析countdownlatch闭锁底层实现原理

漫话人生 漫话人生     2022-12-04     478

关键词:

🍀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

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

浅析countdownlatch闭锁底层实现原理

🍀CountDownLatch是基于AQS同步器的一种同步工具,它可以让一个或多个线程等待,一直等到其他线程完成一组工作,它是AQS共享模式的实现。它的使用方式如下:查看它的内部实现,它的设计模型和ReentrantLoc... 查看详情

java并发编程原理与实战二十六:闭锁countdownlatch

关于闭锁 CountDownLatch之前在网上看到过一篇举例非常形象的例子,但不记得是出自哪里了,所以这里就当自己再重新写一篇吧:例子如下:我们每天起早贪黑的上班,父母每天也要上班,有一天定了一个饭店,一家人一起吃... 查看详情

并发包下常见的同步工具类详解(countdownlatch,cyclicbarrier,semaphore)(代码片段)

目录1.前言2.闭锁CountDownLatch2.1CountDownLatch功能简介2.2使用CountDownLatch2.3CountDownLatch原理浅析3.循环屏障CyclicBarrier3.1CyclicBarrier功能简介3.2使用CyclicBarrier3.3CyclicBarrier原理浅析4.信号量Semaphore4.1Semaphore功能简介4.2使用Sem 查看详情

concurrent并发包之countdownlatch

CountDownLatch实际上是一种闭锁实现。闭锁:是一种同步工具类,可以延迟线程的进度知道其到达终止状态——《Java并发编程实战》。这个怎么解释呢?简单来说,就是有1个线程需要等待其余10个线程都执行完毕后再执行,这个时... 查看详情

通过子类实现kvo,浅析kvo底层原理

通过手动实现KVO,对KVO底层原理有一定认识。KVO只要是通过监听set方法,从而实现对该对象的监听。要监听set方法,有两种实现方式,第一就是使用分类,重写set方法,但是这样就会覆盖父类的set方法,所以不可行,pass掉。第... 查看详情

浅析juc-countdownlatch(代码片段)

JUC-CountDownLatch详解CountDownLatch是通过AQS实现的同步器,与ReentrantLock不同的是,CountDownLatch实现的是共享式获取锁的方法,而非是独占式的。也就是说不同的线程都可以调用CountDownLatch方法获取锁,或者对锁进行释放... 查看详情

4juc--countdownlatch闭锁(代码片段)

CountDownLatch?Java5.0在java.util.concurrent包中提供了多种并发容器类来改进同步容器的性能。?CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作  之前,它允许一个或多个线程一直等待。?闭锁可以延迟线程的进度... 查看详情

并发编程-aqs同步组件之countdownlatch闭锁(代码片段)

CountDownLatch闭锁Java5.0在java.util.concurrent包中提供了多种并发容器类来改进同步容器的性能。CountDownLatch一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待,即CountDownLatch允许... 查看详情

juc--闭锁countdownlatch(代码片段)

CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,允许一个或者多个线程一直等待。闭锁可以延迟线程的进度直到其到达终止状态,可以确保某些活动知道其他活动都完成才继续执行  注意:在r... 查看详情

栅栏——cyclicbarrier

栅栏CyclicBarrier和闭锁CountDownLatch类似,可以说它们都是用来计数,都能阻塞一组线程知道某个事件发生。不同的是闭锁用于等待事件,而栅栏用于等待其他线程。在前一篇《CountDownLatch——闭锁的实现之一》中提到,在CountDownLatc... 查看详情

countdownlatch闭锁semaphore信号量barrier栅栏(代码片段)

...用来确保某些活动直到其他活动都完成才继续执行。  CountDownLatch是一种灵活的闭锁实现,它可以使一个或多个线程等待一组线程。闭锁状态包括一个计数器,该计数器被初始化为一个正数,表示需要等待的事件数量。countDown... 查看详情

第76题java高级技术-多线程10(闭锁countdownlatch)

回城传送–》《JAVA筑基100例》文章目录零、前言一、题目描述二、解题思路三、代码详解多学一个知识点四、推荐专栏五、示例源码下载零、前言​今天是学习JAVA语言打卡的第76天,每天我会提供一篇文章供群成员阅读࿰... 查看详情

guc-5countdownlatch闭锁(代码片段)

 /**CountDownLatch:闭锁,在完成某些运算是,只有其他所有线程的运算全部完成,当前运算才继续执行*/publicclassTestCountDownLatchpublicstaticvoidmain(String[]args)finalCountDownLatchlatch=newCountDownLatch(50);LatchDemold=newLatchDemo(latch);longstart=System.cu... 查看详情

一篇关于countdownlatch的好文章(代码片段)

CountDownLatch简介CountDownLatch是一种java.util.concurrent包下一个同步工具类,它允许一个或多个线程等待直到在其他线程操作执行完成。使用场景:在开发过程中,经常会遇到需要在主线程中开启多条线程去并行执行任务,并且主线程... 查看详情

aqs同步组件-countdownlatch解析和案例(代码片段)

CountDownLatch原理CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量。每当一个线程完成了自己的任务后,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已完成任务,然后在闭锁上等待的线程... 查看详情

cglib动态代理实现及其原理浅析(代码片段)

JDK实现动态代理需要实现类通过接口定义业务方法,对于没有接口的类,如何实现动态代理呢,这就需要CGLib了。CGLib采用了非常底层的字节码技术,其原理是通过字节码技术为一个类创建子类,并在子类中采... 查看详情

java基础之多线程闭锁

1.闭锁方式1:利用CountDownLatch进行闭锁importjava.util.concurrent.CountDownLatch;publicclassCloseLock3{ publicstaticvoidmain(String[]args){ longstart=System.currentTimeMillis(); CountDownLatchlatch=newCountDow 查看详情

countdownlatch实现原理(代码片段)

CountDownLatch的原理这个类一般的应用场景为:一个线程等待另外N(N>=1)个线程的事情搞完了,自己再搞事情。具体应用代码大致如下:publicclassCountDownLatchTestprivatestaticfinalintTHREAD_COUNT=10;privateCountDownLatchlatch=newCountDownLatch(THREAD_COUNT... 查看详情