Java CountDownLatch 和 CyclicBarrier

Java并发CountDownLatchCyclicBarrier 文章目录一.简介二.CountDownLatch三.CyclicBarrier四.总结 一.简介 CountDownLatchCyclicBarrier是jdk concurrent包下工具类,提供一种控制并发流程的工具。 二.CountDownLatch 构造类,常用api public CountDownLatch(int count) { }; //参数count为计数值 public void await() throws InterruptedException { }; //调用awa 阅读详情

在多线程程序设计中,经常会碰到一个线程等待一个或多个线程的场景,碰到这样的场景应该如何解决?
假如是一个线程等待一个线程,则可以通过await()和notify()来实现;
假如是一个线程等待多个线程,则就可以使用CountDownLatch和CyclicBarrier来实现比较好的控制。

Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数器里面的值。

      你可以向CountDownLatch对象设置一个初始的数字作为计数值,任何调用这个对象上的await()方法都会阻塞,直到这个计数器的计数值被其他的线程减为0为止。

      CountDownLatch的一个非常典型的应用场景是:有一个任务想要往下执行,但必须要等到其他的任务执行完毕后才可以继续往下执行。假如我们这个想要继续往下执行的任务调用一个CountDownLatch对象的await()方法,其他的任务执行完自己的任务后调用同一个CountDownLatch对象上的countDown()方法,这个调用await()方法的任务将一直阻塞等待,直到这个CountDownLatch对象的计数值减到0为止。

CyclicBarrier类有两个常用的构造方法:
1. CyclicBarrier(int parties)
      这里的parties也是一个计数器,例如,初始化时parties里的计数是3,于是拥有该CyclicBarrier对象的线程当parties的计数为3时就唤醒,注:这里parties里的计数在运行时当调用CyclicBarrier:await()时,计数就加1,一直加到初始的值
2. CyclicBarrier(int parties, Runnable barrierAction)
     这里的parties与上一个构造方法的解释是一样的,这里需要解释的是第二个进参(Runnable barrierAction),这个参数是一个实现Runnable接口的类的对象,也就是说当parties加到初始值时就触发barrierAction的内容。

Java多线程知识点整理(CyclicBarrierCountDownLatch、Callable、FutureFutureTask) 2019独角兽企业重金招聘Python工程师标准>>> ... 阅读详情

相关推荐

Java并发——Java中的并发类工具

在JDK的并发包里面提供了几个非常有用的工具类:CountDwonLatch、CyclicBarrier、Semaphore、Exchanger。其中CountDwonLatch、CyclicBarrier、Semaphore工具类提供了一种并发流程控制的手段,Exchanger提供了一种在线程间交换数据的手段。一、四种并发工具类1、CountDwonLatch(闭锁)CountDwonLatch...

tongdanping的博客 4927

java中并发常用工具类

java中并发常用工具类

zhouguizhi 6284

【线程 锁】栅栏 CyclicBarrier的构造函数入参parties详解

参考: 戏说java多线程之CyclicBarrier(循环栅栏)的CyclicBarrier(int parties)构造方法

m0_45406092的博客 481

java多线程编程--Phaser----阶段

参考:https://blog.csdn.net/qq_43470725/article/details/120457461 https://blog.csdn.net/liuyu973971883/article/details/107917079 基本使用 在CyclicBarrierCountDownLatch中,我们使用计数器来控制程序的顺序执行,同样的在Phaser中也是通过计数器来控制。在Phaser中计数器叫做parties, 我们可以通过Phaser的构造函数或者register()方法来

qq_43470725的博客 738

Java并发】辅助类CountDownLatchCyclicBarrier、Semaphore

本文总结了JUC常用三大辅助类CountDownLatchCyclicBarrier、Semaphore的使用方法(含示例代码方法解析)。

hrh的博客 3203

java CountDownLatchCyclicBarrier

另外工作中用到CountDownLatch的地方还很多,一般是完成某些事情才能继续某项操作。

master-dragon的专栏 1113

JAVA面试题】CyclicBarrierCountDownLatch的介绍异同点

在多线程并发编程中,线程之间的同步与协调至关重要。Java 提供了多种工具来解决这些问题,其中是两个非常重要的同步辅助类。它们各自具有独特的功能应用场景,能够帮助开发者有效管理并发任务。本文将深入探讨这两个类的工作原理、适用场景及其主要区别,旨在帮助开发者更好地理解并利用这些工具,以提升代码的性能可维护性。更适合阶段性的任务同步,而更适合一次性的任务计数等待。在多线程编程中,选择合适的同步工具是确保程序正确性高效性的关键。通过对

Venus's Blog 1万+

java CountDownLatch CyclicBarrier

CountDownLatch CyclicBarrier 简单使用

kuroshiro的博客 698

[沧海拾遗]java并发之CountDownLatch、SemaphoreCyclicBarrier

JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch、SemaphoreCyclicBarrierCountDownLatch CountDownLatch是一个计数器闭锁,主要的功能就是通过await()方法来阻塞住当前线程,然后等待计数器减少到0了,再唤起这些线程继续执行。 这个类里主要有两个方法,一个是向下减计数器的方法:countdown()

yanhandle的专栏 1万+

JAVAcyclicbarriercountdownlatch的区别分别是什么?

概念: CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。 CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。 应用场景: CountDownLatch这个类能够使一个线程等待其他线程完成各自的工作后再执行。例如,应用程序的主线程希望在负责启动框架服务的线程已经启动所有的框架服务之后再执行。 ...

阿Ben的学习记录 1695

Java面试之JUC系列:CyclicBarrierCountDownLatch

CyclicBarrier 概念 CountDownLatch相反,需要集齐七颗龙珠,召唤神龙。也就是做加法,开始是0,加到某个值的时候就执行 CyclicBarrier的字面意思就是可循环(cyclic)使用的屏障(Barrier)。它要求做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await方法 案例 集齐7个龙珠,召唤神龙的Demo,我们需要首先创建CyclicB

Viper的程序员修炼手册 1456

Java并发之CyclicBarrier & CountDownLatch

Java并发之CyclicBarrier & CountDownLatchCountDownLatchCyclicBarrierCODE CountDownLatch “同生共死” 用于保持线程间的同时开始,初始化一个整形的信号量,每个信号再开始之前 使信号量减一,当信号量不为0时,所有线程被阻塞,直到最后一个线程使信号量为0。使其达到线程同时发生。相比 Semaphore,CountDo...

廖金龙的博客 289

Java中的CountDownLatchCyclicBarrier有什么作用?

CountDownLatchCyclicBarrierJava并发编程中非常有用的工具,它们可以帮助我们更加方便地进行线程通信协作。CountDownLatch是一个计数器,用于等待一组线程完成执行后再执行下一步操作;而CyclicBarrier是一个屏障,用于等待一组线程达到某个屏障点后再执行下一步操作。根据不同的应用场景,我们可以选择使用CountDownLatchCyclicBarrier

it_xushixiong的博客 539

java CountDownLatch CyclicBarrier

CountDownLatch: 一个或者是一部分线程 ,等待另外一部线程都完成了,再继续执行        CyclicBarrier: 所有线程互相等待完成。          CyclicBarrier ,一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 Cy...

laojava的专栏 265

一文掌握Java中的CyclicBarrierCountDownLatchSemaphore

是一个同步助手类,它允许一组线程互相等待,直到所有线程都到达一个公共的屏障点(Barrier Point)后才继续执行。Semaphore(信号量)是一种基于计数的同步机制,它可以用来控制同时访问特定资源的线程数量,是实现资源池或者限制容量的一个有力工具。

逆流的小鱼 1430

java并发编程之CountDownLatchCyclicBarrier

CountDownLatchCyclicBarrier是jdk concurrent包下非常有用的两个并发工具类,它们提供了一种控制并发流程的手段。本文将会提供一些应用场景,结合源码,对它们的具体实现以及如何使用做一个具体分析。CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作。CountDownLatch使用案例需求:解析一个文件下多个txt文件数据,

u010185262的博客 6279

了解Java中的CountDownLatchCyclicBarrier

1.背景介绍 Java中的CountDownLatchCyclicBarrier都是Java并发包中的同步工具类,它们主要用于解决并发问题。CountDownLatch是一种计数器锁,用于让多个线程在完成某个任务后再继续执行。CyclicBarrier是一种循环屏障,用于让多个线程在某个条件满足后再继续执行。 在本文中,我们将详细介绍CountDownLatchCyclicBarrier的...

AI天才研究院 884

JavaCountDownLatchCyclicBarrier的理解区别

CountDownLatchCyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘。本文将通过通俗的例子并结合代码讲解两者的使用方法区别。 CountDownLatchCyclicBarrier都是java.util.concurrent包下面的多线程工具类。 从字面上理解,CountDown表示减法计数,Latch表示门闩的意思,计数为0的时候就可以打开门闩了。Cyc...

HD243608836的博客 267
上一篇: 阿里巴巴Dubbo实现的源码分析
下一篇: JAVA线程池的分析和使用
IT令狐冲
博客等级 码龄18年 122粉丝 56原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值