JAVA多线程进阶篇 4、JUC工具类之CyclicBarrier

【JUC】循环屏障CyclicBarrier详解 jdk中提供了许多的并发工具类,大家可能比较熟悉的有,主要用来阻塞一个线程运行,直到其他线程运行完毕。而jdk还有一个功能类似并发工具类,你知道它的作用吗?和有什么区别呢?对于CountDownLatch不了解的可以参考# CountDownLatch源码硬核解析,循环屏障,用来进行线程协作,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,会触发自己运行,运行完后,屏障又会开门,所有被屏障拦截的线程又可以继续运行。所以是可以重用的。 阅读详情

JAVA多线程进阶篇 4、JUC工具类之CyclicBarrier

JUC 即 java.util.concurrent 包,提供了大量的工具类来简化并发编程。

CyclicBarrier 栅栏(zha lan),是一种线程同步器,基于AQS,用于多个线程的循环集结,在业务场景中可以用于限流、或者游戏开房的配对。

简单示例

其构造方法表示,当线程开始等待时,如果等待数量达到预定数量parties,就会执行barrierAction。

/**
when the given number of parties (threads) are waiting upon it, and which will execute the given barrier action when the barrier is tripped, performed by the last thread entering the barrier.
*/
public CyclicBarrier(int parties, Runnable barrierAction) 

下面的例子中,有100个线程任务,每当有5个线程await等待时既满足“栅栏”的预订人数,于是发车。

public class CyclicBarrierTest {

    public static void main(String[] args) throws InterruptedException {

        CyclicBarrier barrier = new CyclicBarrier(5, new Runnable() {
            @Override
            public void run() {
                System.out.println("满人发车.");
            }
        });

        for(int i=0;i<100;i++) {
            Thread.sleep(new Random().nextInt(1000));
            new Thread(()->{
                try {
                    //做一些业务逻辑
                    System.out.println(Thread.currentThread().getName() +" 满足条件");
                    barrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}

运行结果:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FZH5Pgcf-1646819975614)(D:\能力建设\2022.3\JAVA多线程\图片\CyclicBarrier.png)]

总结

CyclicBarrier当等待线程达到预定数量即出发预定的行为。 适用于限流、配对等业务场景。

【高并发】JUC中的循环栅栏CyclicBarrier的6种使用场景 JUC中的循环栅栏CyclicBarrier的6种使用场景。 CyclicBarrier通常称为循环屏障。它和CountDownLatch很相似,都可以使线程先等待然后再执行。不过CountDownLatch是使一批线程等待另一批线程执行完后再执行;而CyclicBarrier只是使等待的线程达到一定数目后再让它们继续执行。故而CyclicBarrier内部也有一个计数器,计数器的初始值在创建对象时通过构造参数指定,如下所示: 。除此之外,CyclicB 阅读详情

相关推荐

Java并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser

写在前面        在 Java 多线程环境下,JDK 提供了许多的工具类来供开发者使用,这些工具类都在java.util.concurrent 并发包下(俗称JUC),使得我们不需要过多的关心具体业务场景下,应该如何写出同时兼顾线程安全性与高效率的代码。之前文章介绍的:Java 线程池内容,全在这里了,也是 JUC 包下的...

扛麻袋的少年的博客 1748

【JDK 5】JUC 同步类 限流:Semaphore、CountdownLatch、CyclicBarrier

作用: 访问线程达到指定数量时,执行await之后的代码。

码鹿的记录 196

(Touch™)搭建 Windows 开发环境

> OpenHaptics 开发包参考文档。

置心一处,便无事不办 1500

JUC工具类: CyclicBarrier详解

CyclicBarrier底层是基于ReentrantLock和AbstractQueuedSynchronizer来实现的, 在理解的时候最好和CountDownLatch放在一起理解(相见本文分析)。

qq_63353796的博客 1027

2022北京高考数学压轴题21题:Python暴力枚举验证k≥7的5种反例

本文探讨了2022北京高考数学压轴题21题的编程解法,通过Python暴力枚举验证k≥7的5种反例。文章详细介绍了m-连续可表数列的定义、问题转化与约束条件,并提供了暴力枚举算法设计和优化技巧,帮助读者理解如何用编程思维解决数学问题。

weixin_33552698的博客 233

【招聘测评题】中的(行测)图形推理题基本逻辑总结(附例题)

参加招聘的时候,一般提交完简历就需要做测评试卷,测评里面除了性格分析的题,一般会有几十道类似公务员行测的素质测评题,让人很是挠头,据说题库多取自北森。刷题用处不大,这里总结一下图形推理题中常考的几个基本逻辑。

Yujian2563的博客 7万+

CyclicBarrier详解

Java并发包CyclicBarrier核心解析 CyclicBarrier是JUC中实现多线程同步的关键工具,主要特点包括: 循环屏障机制 - 允许线程组在指定屏障点同步,支持重复使用 双重控制 - 通过ReentrantLock和Condition实现线程安全 阶段回调 - 支持屏障触发时执行预定义Runnable任务 典型应用场景: 多阶段计算(如矩阵运算) 并发测试协调 分布式系统节点同步 使用时需注意: 合理设置屏障数避免死锁 处理中断和超时情况 屏障破裂时的异常处理 该组件特别适用于需要分阶段协

csdn_tom_168的博客 1353

MIPI D-PHY TX 一致性测试实例解析 Part 03

本文之前,已经讨论了MIPI D-PHY TX的1.3.x和1.4.x的测试项,1.5.x的测试项相对较少,主要是用于时钟和数据通道相关的时序测量

一只豌豆象的博客 5185

java--JUC快速入门(彻底搞懂JUC)

java–JUC快速入门(彻底搞懂JUC) 文章目录java--JUC快速入门(彻底搞懂JUC)1、学习多线程之前需要知道的一些概念。2、JUC的结构3、Lock锁(重点)4、集合类不安全5、Callable()6、常用的辅助类7、读写锁8、阻塞队列9、线程池 1、学习多线程之前需要知道的一些概念。 1.1 JUC是什么? JUC是java.util.concurrent包的简称,在Java5.0添加,目的就是为了更好的支持高并发任务。让开发者进行多线程编程时减少竞争条件和死锁的问题!...

weixin_43888181的博客 12万+

深入剖析 Hive 中 CASE WHEN 与 IF 函数的性能差异:解锁高效数据处理的关键

CASE WHEN 函数堪称 Hive 中条件判断的多面手,它具备两种强大的语法形式,以应对各种复杂的业务逻辑。简单 CASE 表达式这种形式适用于对某一列的值进行直接的条件匹配。其语法如下:END例如,我们有一个记录学生成绩的表CASE scoreELSE 'D'搜索 CASE 表达式当业务逻辑需要更灵活的条件判断时,搜索 CASE 表达式便派上用场。它的语法为:CASEENDCASEELSE 'D'

2401_83088008的博客 1125

Python爬取谷歌学术全攻略:基于Playwright与Asyncio的高效、抗反爬虫实践

同时,文章将详细解析爬虫过程中可能遇到的各种挑战,如IP封锁、验证码、动态内容加载等,并提供切实可行的解决方案。self.logger.info(f"第 {current_page} 页解析完成,共找到 {len(page_results)} 条结果。:谷歌学术的HTML结构并非一成不变,其CSS类名和标签结构可能会发生变化,且不同地区、不同语言的界面可能存在差异,增加了数据解析的难度。self.logger.info(f"开始搜索关键词: '{keyword}',计划爬取 {max_pages} 页")

2201_76125261的博客 1550

JUC 常用 4 大并发工具类 CountDownLatch、CyclicBarrier、Semaphore、ExChanger

JUC就是java.util.concurrent包,这个包俗称JUC,里面都是解决并发问题的一些定义类,包括,CountDownLatch,CyclicBarrier,Semaphore,ExChanger

Lifelong learning 4312

31、MSP430FR2355时钟系统与低功耗模式解析

本文详细解析了MSP430FR2355的时钟系统和低功耗模式。首先介绍了时钟系统的组成,包括XT1振荡器、DCO、MODCLK、MCLK、SMCLK和ACLK的功能与配置方法。接着探讨了MSP430FR2355的五种低功耗模式及其配置要点,并分析了时钟系统与低功耗模式之间的协同关系。最后通过实际应用案例展示了如何在具体场景中优化系统功耗。文章旨在帮助开发者充分利用MSP430FR2355的时钟与低功耗特性,实现高性能、低功耗的嵌入式系统设计。

mars5的博客 195

常用的JUC(Java Util Concurrent)工具类

包下的原子类为Java并发编程提供了一组高效的、线程安全的原子操作类,它们主要用于在高并发环境下确保对共享变量的操作具有原子性,即在同一时刻只有一个线程能够修改这些变量的值,而不会出现因多线程并发导致的中间状态或数据竞争问题。当两个线程都到达交换点时,它们各自携带的数据会被互换,确保线程间的通信和协作。,等待其他线程也到达屏障。当所有线程都到达后,屏障动作执行,然后屏障重置,线程们继续进行下一次迭代,如此反复三次。的特性,它们各自操作的是独立的本地副本,因此输出结果互不影响,展示了线程间数据的隔离。

weixin_44440231的博客 2630

SAP_SD模块信用管理-最早未清项判断逾期

在 SAP SD 模块的信用管理(Credit Management) 中,系统可以通过 最早未清项(Oldest Open Item) 来判断客户是否存在逾期,从而影响订单的信用检查结果。例如: 定义最大未清项目%为1%,未清天数为1天,即允许客户“逾期1天的未清应收帐款/该客户的应收帐款余额”最大比例为1%,若超过1%则将被信用冻结。的信用检查功能,用于判断客户是否有账龄过长的未清款项,并据此决定是否允许新的销售订单继续处理。然后在查看客户的信贷信息可以看到,最早的未清信息显示在系统中。

我小时候很黑的博客 863

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

JUC 常用 4 大并发工具类

JUC就是java.util.concurrent包,这个包俗称JUC,里面都是解决并发问题的一些定义类,该包的位置位于java下面的rt.jar包下面。

m0_59679869的博客 1831

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【JUC基础】08. 三大工具类

JUC包中包含了三个非常实用的工具类:CountDownLatch(倒计数器),CyclicBarrier(循环栅栏),Semaphore(信号量)。

有一只柴犬的专栏 1523

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

JUC 工具类大全:CountDownLatch、Semaphore、CyclicBarrier 有何区别?

摘要:本文深入解析Java并发编程中CountDownLatch、Semaphore和CyclicBarrier三大同步工具。CountDownLatch用于主线程等待子任务完成,基于AQS实现一次性计数;Semaphore通过许可机制控制并发线程数,支持公平/非公平策略;CyclicBarrier实现多线程阶段性同步,支持循环使用和回调机制。文章从源码层面对比三者的实现原理,分析适用场景,并给出使用建议:CountDownLatch适合任务完成通知,Semaphore用于限流,CyclicBarrier适

小健学Java的博客 1747

JUC工具类-CyclicBarrier

集合等待:允许一定数量的线程在达到屏障时互相等待,直到所有线程到达指定点。屏障触发:当所有线程都达到屏障时,屏障“开启”,所有线程同时被唤醒继续执行。触发动作:可选的屏障动作(barrierAction),用于在所有线程到达后执行特定的逻辑,如合并计算结果或状态更新。循环可重用:在所有线程通过屏障后,自动重置计数器,支持多次使用。简单地说,CyclicBarrier 就像“远足团队的集合点”,所有线程(团队成员)到达后,等待人员数量达到约定值后一起出发,而这一集合过程可以在整个任务中不断重复使用。

左灯右行的爱情 1203

JUC常用并发工具类

JUC常用并发工具类

YIYIYI 1837

Java并发 JUC工具类:CyclicBarrier详解

对于CountDownLatch,其他线程为游戏玩家,比如英雄联盟,主线程为控制游戏开始的线程。在所有的玩家都准备好之前,主线程是处于等待状态的,也就是游戏不能开始。当所有的玩家准备好之后,下一步的动作实施者为主线程,即开始游戏。对于CyclicBarrier,假设有一家公司要全体员工进行团建活动,活动内容为翻越三个障碍物,每一个人翻越障碍物所用的时间是不一样的。但是公司要求所有人在翻越当前障碍物之后再开始翻越下一个障碍物,也就是所有人翻越第一个障碍物之后,才开始翻越第二个,以此类推。

weixin_45773632的博客 1475

JUC第二十七讲:JUC工具类: CyclicBarrier详解

本文是JUC第二十七讲,JUC工具类: CyclicBarrier详解。CyclicBarrier中文名为:循环栅栏,底层是基于 ReentrantLock 和 AbstractQueuedSynchronizer 来实现的,在理解的时候最好和 CountDownLatch 放在一起理解。

Jet_qi的博客 548

【JUC并发编程】通讯工具类 CountDownLatch、CyclicBarrier、Semaphore 详解

【JUC并发编程】通讯工具类 CountDownLatch、CyclicBarrier、Semaphore 详解

blblccc 702

JUC工具类

​Exchanger​ 是 Java 中的一个同步工具类,用于在两个线程之间进行数据交换。Exchanger​ 提供了一个同步点,当两个线程都到达这个同步点时,它们可以交换数据。​ExchangerExchanger​ 允许两个线程之间进行数据的交换,其中一个线程将数据放入Exchanger​,而另一个线程从Exchanger​ 中取出数据,从而实现线程间的数据传递。Exchanger​ 提供了一个同步点,当两个线程都到达这个同步点时,它们可以交换数据。

复制乔布斯 1003

JUC包下的并发工具类

并发工具类主要功能用法示例特点与注意事项CountDownLatch (倒计数器)允许一个或多个线程等待其他线程完成操作后再继续执行- 只能使用一次,不能重置 - 适用于一次性事件,例如等待多线程计算完成后汇总结果CyclicBarrier (循环屏障)使一组线程到达一个屏障点时被阻塞,直到最后一个线程到达屏障点,所有线程才继续执行- 可以重用,适用于多次执行的场景- 适用于需要多个线程同时开始某些任务的场景,例如多线程处理数据后同时汇总Semaphore (信号量)

落日的博客 1320

【多线程进阶】JUC下的常用类

"JUC"是"Java Util Concurrent"的缩写,代表Java提供的一套并发工具类。这些工具类大大简化了编程并发和多线程应用的复杂性,提供了更高级、更强大、更安全的并发操作功能。以下是一些常见的JUC类:

书生-w的博客 8464
上一篇: JAVA多线程进阶篇 7、JUC同步器之Semaphore
下一篇: JAVA多线程进阶篇 8、JUC同步器之Exchanger
悟空学编程
博客等级 码龄12年 32粉丝 123原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

悟空学编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值