JAVA多线程进阶篇 5、JUC同步器之CyclicBarrier

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


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

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

1 CyclicBarrier使用方法示例

其构造方法表示,当线程开始等待时,如果等待数量达到预定数量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();
        }
    }
}

运行结果:
CyclicBarrier

总结

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

多线程系列在github上有一个开源项目,主要是本系列博客的实验代码。

https://github.com/forestnlp/concurrentlab

如果您对软件开发、机器学习、深度学习有兴趣请关注本博客,将持续推出Java、软件架构、深度学习相关专栏。

您的支持是对我最大的鼓励。

多线程安全——JUC工具汇总 LongAdder JDK1.8时,java.util.concurrent.atomic包中提供了一个新的原子类:LongAdder。 根据Oracle官方文档的介绍,LongAdder在高并发的场景下会比它的前辈————AtomicLong 具有更好的性能,代价是消耗更多的内存空间: 转存失败重新上传取消 ... 阅读详情

相关推荐

【高并发】JUC中的循环栅栏CyclicBarrier的6种使用场景

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

九师兄 6574

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

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

码鹿的记录 196

JUC 全家桶系列,一键三连就完事了

JUC、AQS、CAS、Lock、ReentrantLock、Atomic、Future、Executors、JUC工具类、JUC集合类、Fork-Join框架

扛麻袋的少年的博客 3296

JUC工具类: CyclicBarrier详解

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

qq_63353796的博客 1027

求助:有没有基于pscad的锂电池仿真模型

求助:有没有基于pscad的锂电池仿真模型 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变没有 我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写...

qq_38922523的博客 1222

MACS2软件进行Peak calling

MACS2可以检出ChIP-Seq,ATAC-seq 以及 MeRIP-seq (RNA甲基化测序) 等富集的序列。peaks calling 有不同的方法,MACS2是最常用的call peaks工具。 MACS全称Model-based Analysis of ChIP-Seq,最初的设计是用来鉴定转录因子的结合位点,但是它也可以用于其他类型的富集方式测序。usage: macs2 [-h] [--version] {callpeak,bdgpeakcall,bdgbroadca

qq_27390023的博客 3789

CyclicBarrier详解

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

csdn_tom_168的博客 1353

基于ESP32与JavaScript的Stack-chan桌面机器人:从硬件组装到AI交互的完整实践

嵌入式系统开发是连接物理世界与数字世界的核心技术,其核心原理在于通过微控制器直接操作硬件外设,实现感知、决策与执行。这项技术的核心价值在于为物联网、智能硬件和机器人等领域提供了低功耗、高可靠性的解决方案。在机器人应用场景中,嵌入式平台常作为主控大脑,驱动舵机、传感器并处理交互逻辑。本文聚焦的Stack-chan项目,正是这一理念的生动实践:它采用流行的ESP32微控制器,并创新性地通过Moddable运行时支持使用JavaScript进行嵌入式开发,极大地降低了机器人编程的门槛。开发者可以基于此平台,轻松实

weixin_28729173的博客 437

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

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

EndlessProcess的专栏 3691

疲劳容器的定义_FKM规范针对非焊接构件疲劳强度评估实例介绍(下篇)

一、写在前面FKM Inside ANSYS软件,该软件是在FKM 规范的基础上,在ANSYS Workbench内开发的进行非焊接构件及焊缝静强度和疲劳强度评估的工具包。基于ANSYS计算模型的信息,在图形用户界面定义相关设置,利用有限元分析计算结果,自动嵌入FKM规范要求的静强度计算和疲劳强度计算流程和方法,自动将应力结果和相关物理量传递给工具包,无须手动预先选择评估的热点区域,可以...

weixin_35925298的博客 1885

Calibre 3Dstack Flow Example(5-2)

本文详细介绍了Calibre3DSTACK工具在3D-IC设计验证中的应用。主要内容包括:1)连通性检查(LVS)规则编写,重点说明connected命令的使用方法和多文本标签处理;2)设计规则检查(DRC)实现,涵盖层间距检查和焊盘重叠检查;3)系统网表生成器操作流程,从芯片导入到网连通性定义;4)两种规则文件语法(扩展语法和传统语法)的编写示例;5)验证报告文件格式解析。通过具体案例演示了如何建立完整的3D-IC验证流程,包括芯片定义、装配操作、电气连接验证和物理规则检查等关键步骤,为3D-IC设计验证

u013620135的博客 2336

JUC工具类-CyclicBarrier

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

左灯右行的爱情 1203

通信算法之267 : DJI无人机 云哨 DroneID 640ms

消费级无人机可以用于高级航拍、物流和人道主义救援等等。但是其广泛使用给安全、安保和隐私带来了许多风险。例如,攻击方可能会使用无人机进行监视、运输非法物品,或通过侵入机场上方的封闭空域造成经济损失。为了防止恶意使用,无人机制造商采用多种对策来强制安全可靠地使用无人机,例如对速度和高度施加软件限制,或使用地理围栏实施禁飞区。作为对传统对策的补充,市场领导者大疆(DJI)为无人机实施了一种称为 DroneID 的跟踪协议,该协议旨在将无人机及其操作员的位置传输给授权实体,例如执法部门或关键基础设施的运营商。

leegang12的专栏 3308

Java多线程(7):JUC(上)

前面把线程相关的生命周期、关键字、线程池(ThreadPool)、ThreadLocal、CAS、锁和AQS都讲完了,现在就剩下怎么来用多线程了。而要想用好多线程,其实是可以取一些巧的,比如JUC(好多面试官喜欢问的JUC,就是现在要讲的JUC)。

分享专业、有用、有趣的技术、产品、运营和管理知识。 229

HarmonyOS应用开发者基础认证

B. 自定义组件:可复用的 UI 单元,可组合其它组件。D. 内置组件:ArkTS中默认内置的基本组件和布局组件,开发者可以直接调用,如Column、Text、Divider、Button等。E. 属性方法:用于组件属性的配置,统一通过属性方法进行设置,如fontSize()、width()、height()、color() 等。在Column和Row容器组件中,justifyContent用于设置子组件在主轴方向上的对齐格式,alignItems用于设置子组件在交叉轴方向上的对齐格式。

牛肉胡辣汤 3818

ArcGIS Pro SDK (二十五)工作流管理器

【代码】ArcGIS Pro SDK (二十五)工作流管理器。

Winemonk 494

并发编程 — 6.5 JUC — 同步器

同步器名称 作用 CountDownLatch 倒数计数器,构造时设定计数值,当计数值归零后,所有阻塞线程恢复执行;其内部实现了AQS框架 CyclicBarrier 循环栅栏,构造时设定等待线程数,当所有线程都到达栅栏后,栅栏放行,然后再进行新的一次循环。其内部通过ReentrantLock和Condition实现同步 Semaphore 信号量,类似于“令牌...

sinat_27593959的博客 238

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java并发工具类全面盘点:从同步器到并发容器实战指南

(简称JUC)是Java提供的并发编程工具包,从JDK 1.5开始引入,参考自EDU.oswego.cs.dl.util.concurrent,是JSR 166标准规范的具体实现。JUC包为开发者提供了丰富的并发编程原语和高级抽象,极大地简化了多线程程序的开发难度。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 165

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JUC包中的各种同步器

park(): 阻塞当前线程,直到unpark方法被调用或当前线程被中断,park方法才会返回。parkNanos(long nanos): 同park方法,nanos表示最长阻塞超时时间,超时后park方法将自动返回。单位是纳秒 ,1秒 = 100010001000 纳秒parkUntil(long deadline): 同park()方法,deadline参数表示最长阻塞到某一个时间点,当到达这个时间点,park方法将自动返回。(该时间为从1970年到现在某一个时间点的毫秒数)

qq_39701205的博客 1029

JUC并发编程之同步器(Semaphore、CountDownLatch、CyclicBarrier、Exchanger、CompletableFuture)附带相关面试题

1.Semaphore(资源调度)、2.CountDownLatch(子线程优先)、3.CyclicBarrier(栅栏)、4.Exchanger(公共交换区)、5.CompletableFuture(异步编程)

Alphamilk的博客 371

Java多线程进阶(18)—— J.U.C之synchronizer框架:CyclicBarrier

是一个辅助同步器类,在JDK1.5时随着J.U.C一起引入。这个类的功能和我们之前介绍的CountDownLatch有些类似。我们知道,是一个倒数计数器,在计数器不为0时,所有调用await的线程都会等待,当计数器降为0,线程才会继续执行,且计数器一旦变为0,就不能再重置了。可以认为是一个栅栏,栅栏的作用是什么?就是阻挡前行。

smart_an的专栏 887

Java JUC并发编程全面解析:从原理到实战

Java并发编程进阶:JUC核心组件与AQS原理 摘要:本文系统讲解Java并发工具包(JUC)的核心知识体系,包含五大组件:锁框架(locks)、原子类(atomic)、并发工具(tools)、并发集合(collections)和线程池(executor)。重点剖析ReentrantLock的可重入、公平/非公平特性及读写锁实现原理,深入解析AQS同步器底层机制。通过对比synchronized与JUC锁的差异,帮助开发者根据场景选择合适并发工具,提升高并发系统性能。课程采用"理论+实践&quo

百锦再的博客 1167

JAVA多线程进阶篇 6、JUC同步器之Phaser

phaser常用在遗传算法中,用于每一代的筛选和迭代。

EndlessProcess的专栏 428

CountDownLatch和CyclicBarrier

CountDownLatch是一个计数器,通过它可以控制线程执行的先后顺序。它的作用是让某个线程等待若干个其他线程执行完后再执行。使用CountDownLatch时需要指定一个计数器的值,当所有计数器都为0时,等待线程才会继续执行。CyclicBarrier也可以用于控制线程的顺序执行。它可以协调一组线程在某个屏障处等待并互相等待,直到所有线程都到达该屏障后再一起继续执行。CyclicBarrier可以重复使用,每次调用await()方法时,计数器的值都会减1,当计数器为0时,所有线程都会被释放。

weixin_44808225的博客 151

JUC 多线程并发编程

进程(Process):计算机中正在运行的程序的实例,是操作系统分配资源的基本单位。每个进程拥有自己的内存空间、文件描述符、数据栈等。 线程(Thread):进程中的一个执行单元。一个进程中至少有一个线程,通常称为主线程。线程是 **CPU 调度和执行的最小单位。** 线程共享进程的资源,一个进程中的多个线程可以并发执行,线程之间的通信比进程之间的通信更高效。 ### 2. 并发与并行 并发(Concurrency):系统能够在同一**时间段**内处理多个任务,但这些任务可

小程xy的博客 1937

【转】CountDownLatch, CyclicBarrier, Semaphore 简介

这次说一下 JUC 中的同步器三个主要的成员:CountDownLatch、CyclicBarrier 和 Semaphore(不知道有没有初学者觉得这三个的名字不太好记)。这三个是 JUC 中较为常用的同步器,通过它们可以方便地实现很多线程之间协作的功能。(下面的代码出自 JDK 文档) CountDownLatch 直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用...

14舍224 188
上一篇: JAVA多线程进阶篇 4、JUC同步器之Countdownlatch
下一篇: JAVA多线程进阶篇 6、JUC同步器之Phaser
悟空学编程
博客等级 码龄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、付费专栏及课程。

余额充值