首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

快速掌握并发编程---CountDownLatch原理和实战

方法一 在前面的文章中我们介绍了Thread类的join方法:快速掌握并发编程---Thread常用方法,join的工作原理是,不停检查thread是否存活,如果存活则让当前线程永远wait,直到thread...但问题来了,如果面试官问你实现原理,你却回答不上来,就会给人你在瞎用的感觉,这样好不容易前面拿到点好印象结果被打回原型。...至于join的原理,建议去看看我之前发的线程常用方法里:快速掌握并发编程---Thread常用方法,那里面说的很清楚了,所这里就不在重复了。 今天我们着重了了CountDownLatch。...CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。...常用方法 构造方法 我们在上面的案例中 int threadCount = 5; CountDownLatch countDownLatch = new CountDownLatch(threadCount

31840
您找到你想要的搜索结果了吗?
是的
没有找到

CyclicBarrier、CountDownLatch以及Semaphore使用及其原理分析

首先我们分别介绍这几个组件的功能然后再通过实例分析和源码分析其中设计原理。...下面我们将分析其设计原理。 设计原理 CyclicBarrier调用await()方法是线程等待,await()方法源码如下: ?...CountDownLatch CountDownLatch的主要功能是实现几个计数器,使N个现场执行完成后当前线程才会继续执行下去。...输出: Thread-0执行完毕 Thread-1执行完毕 Thread-2执行完毕 Thread-3执行完毕 Thread-4执行完毕 主线程执行 原理分析 构造方法 ?...CountDownLatch主要用于某个线程等待N个线程执行完后等待的线程接着继续执行下去,不能够重复执行,CountDownLatch通过设施AQS state值来实现,每次调用counDown方法后都去唤醒正在等待的线程

47320

CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结

CountDownLatch、CyclicBarrier、Semaphore 的原理以及实例总结 在Java多线程编程中,有三种常见的同步工具类:CountDownLatch、CyclicBarrier...本文将对它们的原理和实例进行分析总结。 一、CountDownLatch CountDownLatch是一个计数器类,用来控制线程等待其他线程执行完毕再继续执行。...CountDownLatch的使用思路比较简单,首先创建一个CountDownLatch对象,并把需要等待的线程数量传入CountDownLatch的构造方法。...CyclicBarrier和CountDownLatch的区别在于,CountDownLatch只能使用一次,而CyclicBarrier可以重复使用。...总结 本文分析了CountDownLatch、CyclicBarrier、Semaphore三种常见的同步工具类的原理和实例。这些工具类可以帮助我们在多个线程之间进行协调,实现更高效的并发编程。

11110

Java Review - 并发编程_ CountDownLatch原理&源码剖析

CountDownLatch出现之前一般都使用线程的join()方法来实现这一点,但是join方法不够灵活,不能够满足不同场景的需要,所以JDK开发组提供了CountDownLatch这个类,使用CountDownLatch...实例 private static volatile CountDownLatch countDownLatch = new CountDownLatch(2); public static...子线程执行完毕后调用countDownLatch.countDown()方法让countDownLatch内部的计数器减1 所有子线程执行完毕并调用countDown()方法后计数器会变为0,这时候主线程的...join方法了,就是说countDownLatch相比join方法让我们对线程同步有更灵活的控制 类图关系 从类图可以看出,CountDownLatch是使用AQS实现的。...void await() 当线程调用CountDownLatch对象的await方法后,当前线程会被阻塞,直到下面的情况之一发生才会返回 当所有线程都调用了CountDownLatch对象的countDown

20820

CountDownLatch

CountDownLatch作用阻塞一个或多个线程等待其他线程完成操作。 定义初始化的时候,需要传入一个正数来初始化计数器**(0也可以,但这样定义没有实际意义)。...CountDownLatch通常用于多个线程之间的协调工作。 假设有如下情节: 同时获取5张表的数据并一同返回 为了让cpu更好的得到利用,程序执行效率更高,使用多线程来完成。...那么刚才也有说CountDownLatch是阻塞一个或多个线程等待其他线程完成操作,那么我们试一下。...需要减少的总次数 private static CountDownLatch countDownLatch = new CountDownLatch(5); public static...总体CountDownLatch的作用以及使用就没有了,很简单,大家可以多多尝试。在开发中用到非常多。

50520

Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析

同时通过分析其原理,也可使我们做到知其然,并知其所以然。 这里首先来介绍一下 CountDownLatch 的用途,CountDownLatch 允许一个或一组线程等待其他线程完成后再恢复运行。...2.原理 2.1 CountDownLatch 的实现原理 CountDownLatch 的同步功能是基于 AQS 实现的,CountDownLatch 使用 AQS 中的 state 成员变量作为计数器...CountDownLatch 本身的原理并不难理解,不过如果大家想深入理解 CountDownLatch 的实现细节,那么需要先去学习一下 AQS 的相关原理。...3.1 CountDownLatch 源码分析 CountDownLatch原理不是很复杂,所以在具体的实现上,也不是很复杂。...CountDownLatch 的主要逻辑都是封装在 Sync 和其父类 AQS 里的。所以分析 CountDownLatch 的源码,本质上是分析 Sync 和 AQS 的原理

1.9K152

面试官:说说CountDownLatch,CyclicBarrier,Semaphore的原理

CountDownLatch CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景。...public class CountDownLatchTest { private static int num = 3; private static CountDownLatch countDownLatch...他和join()方法的区别就是join会阻塞子线程直到运行结束,而CountDownLatch可以在任何时候让await()返回,而且用ExecutorService没法用join了,相比起来,CountDownLatch...CountDownLatch基于AQS实现,volatile变量state维持倒数状态,多线程共享变量可见。...内部维护parties记录总线程数,count用于计数,最开始count=parties,调用await()之后count原子递减,当count为0之后,再次将parties赋值给count,这就是复用的原理

51820

CountDownLatch详解

参考:Java并发编程的艺术 JDK版本:AdoptOpenJDK 11.0.2+9 1 概念 CountDownLatch允许一个或者多个线程去等待其他线程完成操作。...CountDownLatch接收一个int型参数,表示要等待的工作线程的个数。 当然也不一定是多线程,在单线程中可以用这个int型参数表示多个操作步骤。...2 方法 CountDownLatch 提供了一些方法: 方法 说明 await() 使当前线程进入同步队列进行等待,直到latch的值被减到0或者当前线程被中断,当前线程就会被唤醒。...Process finished with exit code 0 4 源码解析 4.1 Sync 内部类 CountDownLatch通过内部类Sync来实现同步语义。...这就是CountDownLatch的机制,尝试获取latch的线程只有当latch的值减到0的时候,才能获取成功。

17620

Java并发学习之CountDownLatch实现原理及使用姿势

CountDownLatch实现原理及使用姿势 在并发编程的场景中,最常见的一个case是某个任务的执行,需要等到多个线程都执行完毕之后才可以进行,CountDownLatch可以很好解决这个问题 下面将主要从使用和实现原理两个方面进行说明...,围绕点如下 CountDownLatch 是个什么鬼 怎么用(结合case说明) 底层实现原理(及如何保障功能的正常性) I....await(long, TimeUnit)来替代直接使用await()方法,至少不会造成阻塞死只能重启的情况 有兴趣的小伙伴可以对比下这个实现与 《Java并发学习之ReentrantLock的工作原理及使用姿势...实现原理 同ReentrantLock一样,依然是借助AQS的双端队列,来实现原子的计数-1,线程阻塞和唤醒 前面《Java并发学习之ReentrantLock的工作原理及使用姿势》 介绍了AQS的结构...实现原理 await内部实现流程: 判断state计数是否为0,不是,则直接放过执行后面的代码 大于0,则表示需要阻塞等待计数为0 当前线程封装Node对象,进入阻塞队列 然后就是循环尝试获取锁,直到成功

11.8K142

Java多线程并发控制工具CountDownLatch,实现原理及案例

倒计数器的初始值在构建CountDownLatch对象时指定,它表示我们需要等待的条件个数。await方法能让线程进入等待状态,等待的条件是倒计数器的值大于0。...实现原理 先前介绍过如何基于AQS同步器实现一个自定义同步器,实际上CountdownLatch也是基于AQS来实现的,只要使用AQS的共享模式即可以轻松实现闭锁。...下面我们看详细的实现代码,CountdownLatch类的构造函数需要传入一个整型参数,表示倒计数器的初始值,对应着AQS的state状态变量。...按照官方推荐的自定义同步器的做法,将继承了AQS类的子类Sync作为CountdownLatch类的内部类,而CountdownLatch同步器中相关的操作只需代理成子类中对应的方法即可。...案例 2 第二个例子是创建一个CountdownLatch对象作为倒计数器,其值为2。

84470
领券