Java CyclicBarrier使用

java多线程CyclicBarrier使用示例,让线程起步走 1、CyclicBarrier:一个同步辅助类,用于协调多个子线程,让多个子线程在这个屏障前等待,直到所有子线程都到达了这个屏障时,再一起继续执行后面的动作。2、使用场景举例: 年末公司组织团建,要求每一位员工周六上午8点【自驾车】到公司门口集合,然后【自驾车】前往目的地。 在这个案例中,公司作为主线程,员工作为子线程。3、代码示例;package com.test.spring.suppo 阅读详情
 使用说明
栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生。栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程。
CyclicBarrier可以使一定数量的线程反复地在栅栏位置处汇集。当线程到达栅栏位置时将调用await方法,这个方法将阻塞直到指定数量的线程都到达栅栏位置。如果所有线程都到达栅栏位置,那么栅栏将打开,此时所有的线程都将被释放,而栅栏将被重置以便下次使用。


 构造器
 CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程使用await()方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。

 CyclicBarrier的另一个构造函数CyclicBarrier(int parties, Runnable barrierAction),用于线程到达屏障时,优先执行barrierAction,方便处理更复杂的业务场景。

 核心方法:
 public int await() throws InterruptedException, BrokenBarrierException
    阻塞直到指定数量的线程到达栅栏位置

 public int await(long timeout, TimeUnit unit) throws InterruptedException,BrokenBarrierException,TimeoutException
        阻塞直到指定数量的线程到达栅栏位置或到达了指定最长时间

Demo

public class CyclicBarrierDemo {
    public static class Soldier implements Runnable{
        private String soldier;
        private final CyclicBarrier  cyclic;

        Soldier(CyclicBarrier cyclic,String soldierName){
            this.cyclic = cyclic;
            this.soldier = soldierName;
        }
        @Override
        public void run() {
            try {
                //等待所有士兵到齐
                cyclic.await();
                doWork();
                cyclic.await();    //等待所有士兵完成工作
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }

        }


        void doWork(){
            try {
                Thread.sleep(Math.abs(new Random().nextInt()%10000));
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println(soldier +":任务完成");
        }
    }


    public static class BarrierRun implements Runnable{
        boolean flag;
        int N;

        public BarrierRun(boolean flag,int N){
            this.flag = flag;
            this.N = N;
        }

        @Override
        public void run() {
            if (flag){
                System.out.println("司令:[士兵"+N+"个,任务完成!");
            }else{
                System.out.println("司令:[士兵"+N+"个,集合完毕!");
                flag = true;
            }
        }
    }


    public static void main(String[] args) {
        final int N = 10;
        Thread[] allSoldier = new Thread[N];
        CyclicBarrier  cyclicBarrier = new CyclicBarrier(N,new BarrierRun(false,N));

        //设置屏障点,主要是为了执行这个方法
        System.out.println("集合队伍!");

        for (int i = 0 ; i < N ; ++i){
            System.out.println("士兵"+i+"报道");
            allSoldier[i] = new Thread(new Soldier(cyclicBarrier,"士兵"+i));

            allSoldier[i].start();
        }
    }
}

结果:

集合队伍!
士兵0报道
士兵1报道
士兵2报道
士兵3报道
士兵4报道
士兵5报道
士兵6报道
士兵7报道
士兵8报道
士兵9报道
司令:[士兵10个,集合完毕!
士兵0:任务完成
士兵5:任务完成
士兵7:任务完成
士兵2:任务完成
士兵6:任务完成
士兵4:任务完成
士兵9:任务完成
士兵1:任务完成
士兵3:任务完成
士兵8:任务完成
司令:[士兵10个,任务完成!

Java进阶:CyclicBarrier基本使用 概述 上一篇文章讲到 CountDownLatch 的用法,CountDownLatch是倒计时直到最后值等于0,才不再堵塞。CyclicBarrier 相反,它主要是做加法的,直到值为某一个值的时候,堵塞才会消失。 CyclicBarrier 实现 需求背景: 当前某部门准备开会,只有当部门全部10个人都到场后,会议才能开始 代码实现: public static void main(String[] args) { final int count = 10; 阅读详情

相关推荐

Java中CyclicBarrier的用法分析

CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。用法略有不同,测试代码如下:

详解Java多线程之循环栅栏技术CyclicBarrier

CyclicBarrier主要用于协调多个线程,确保它们在继续执行之前在某个公共点同步。重用性:一个CyclicBarrier可以被重复使用,这对于那些分阶段执行的多线程任务非常有用。异常处理:正确处理和对于构建健壮的并发应用至关重要。与其他工具的结合:CyclicBarrier可以与Java的其他并发工具,如ExecutorService,配合使用,以处理更复杂的并发场景。学习并发编程是一个持续的过程。技术总是在发展,新的挑战总是在出现。

宋小黑的博客 2075

三相SST固态变压器详细设计案例

本案例针对400kVA、30kHz三相固态变压器(SST)开展详细设计,核心采用输入串联输出并联(ISOP)拓扑架构(模块化多电平矩阵变换器M3C简化版),重点完成高频变压器的参数计算、绕组设计、损耗分析及液冷温升验证,同时覆盖系统级架构设计、半导体损耗估算及整机效率优化,全流程基于当前电力电子技术可行性展开。

qq_32103755的博客 3308

Java之CyclicBarrier使用

1、类说明: 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。 2、使用场景: 需要所有的子任务都完成时,才执行主任务,这个时候就

shihuacai的专栏 3万+

Monocle2在R 4.3环境下的终极避坑指南:从安装到可视化全流程解析

本文提供了在R 4.3环境下安装和运行Monocle2的完整解决方案,重点解决了依赖包兼容性、源码修改及BEAM分析报错等关键问题。文章详细解析了从环境准备、依赖包处理、源码安装验证到从Seurat对象转换、拟时轨迹构建、高级可视化及性能优化的全流程,旨在帮助用户顺利完成单细胞拟时分析。

weixin_29206669的博客 1358

CTFShow萌新区全攻略:从密码破解到Web渗透的实战解析

本文为CTFShow萌新区新手提供从密码破解到Web渗透的完整实战攻略。文章深入解析了密码学、隐写术、杂项和Web安全四大核心方向,分享了实用的解题工具、思维方法和绕过技巧,旨在帮助初学者建立系统的安全竞赛解题体系,而不仅仅是提供一份题解(WP)。

weixin_29216957的博客 301

Java多线程:回环屏障CyclicBarrier的使用(八)

CyclicBarrier(回环屏障),阻塞一组线程,直至某个状态之后再全部同时执行,并且所有线程都被释放。和之前说的CountdownLatch功能相反,CountdownLatch阻塞主线程,等所有子线程完结了再继续下去。 上节介绍的CountDownLatch在解决多个线程同步方面相对于调用线程的join方法已经有了不少优化,但是CountDownLatch的计数器是一次性的,也就是等到计数器值变为0后,再调用CountDownIatch的await和countdown方法都

weixin_46204877的博客 883

手把手教你用T630芯片开发USB3.0数据采集卡(含FPGA对接避坑指南)

本文详细介绍了如何使用国产T630芯片开发USB3.0数据采集卡,包括FPGA对接的避坑指南。T630作为国产替代方案,相比传统CYUSB3014芯片,具有更高的传输带宽(实测410MB/s)和更完善的开发支持。文章从硬件设计、固件开发到上位机调试,提供了全流程的技术细节和优化技巧,助力开发者快速实现工业级数据采集系统。

weixin_42531163的博客 622

Java并发编程之CyclicBarrier详解

简介栅栏类似于闭锁,它能阻塞一组线程直到某个事件的发生。栅栏与闭锁的关键区别在于,所有的线程必须同时到达栅栏位置,才能继续执行。闭锁用于等待事件,而栅栏用于等待其他线程。CyclicBarrier可以使一定数量的线程反复地在栅栏位置处汇集。当线程到达栅栏位置时将调用await方法,这个方法将阻塞直到所有线程都到达栅栏位置。如果所有线程都到达栅栏位置,那么栅栏将打开,此时所有的线程都将被释放,而栅栏...

Stay Hungry, Stay Foolish 6万+

安卓/苹果/支付宝sdk拉起支付宝h5/app支付

代码】安卓/苹果/支付宝sdk拉起支付宝h5/app支付。

m0_68973987的博客 5388

SECS/GEM协议库及开源代码

以下是在开发SECS/GEM协议过程中,在网络上搜集协议实现资源,希望对SECS/GEM协议感兴趣的同学能有所帮助。 开源代码 freesecs FREESECS 是一个开源的SEMI SECS协议库,采用C++语言实现,可运行于Linux, MacOS X, NetBSD。 实现协议:E37.1、E5 开源地址:freesecs download | SourceForge.net 下载地址:https://download.youkuaiyun.com/download/BT_LEO/24305429

码农的历程 9948

cyclicbarrier java_java中CyclicBarrier的使用

CyclicBarrier是java 5中引入的线程安全的组件。它有一个barrier的概念,主要用来等待所有的线程都执行完毕,然后再去执行特定的操作。假如我们有很多个线程,每个线程都计算出了一些数据,然后我们需要等待所有的线程都执行完毕,再把各个线程计算出来的数据加起来,的到最终的结果,那么我们就可以使用CyclicBarrier。CyclicBarrier的方法我们先看下CyclicBarri...

weixin_31652625的博客 338

实战指南:如何用Frida绕过某梆加固的Anti-Frida检测(附完整脚本)

本文深入剖析了企业级加固方案中的Anti-Frida检测机制,并提供了实战对抗策略。通过分析基于文件系统、内存特征、行为及环境的多层次检测原理,文章详细介绍了如何定位检测逻辑、绕过maps文件扫描、对抗内存与行为特征检测,并附上了针对某梆加固的完整绕过脚本与系统化工程方案。

weixin_42527589的博客 601

java中CyclicBarrier的使用

java中CyclicBarrier的使用 CyclicBarrier是java 5中引入的线程安全的组件。它有一个barrier的概念,主要用来等待所有的线程都执行完毕,然后再去执行特定的操作。 假如我们有很多个线程,每个线程都计算出了一些数据,然后我们需要等待所有的线程都执行完毕,再把各个线程计算出来的数据加起来,的到最终的结果,那么我们就可以使用CyclicBarrier。 CyclicBarrier的方法 我们先看下CyclicBarrier的构造函数: public CyclicBarri

vx539413949的博客 323

【项目实战】分布式日志系统 之 Exactly-once 语义:确保数据处理的精确性

在分布式系统的数据传输与处理中,是一种核心可靠性保障,其目标是确保数据“仅被处理一次”——既不重复(避免多次处理),也不遗漏(避免未处理)。与,二者共同保障数据处理的精确性。Exactly-once 语义是分布式系统中数据可靠性的高级目标,其核心通过“幂等设计”(解决重复问题)和“分布式事务”(解决原子性问题)实现。在实际应用中,常结合 At-Least-Once 语义与幂等性,或通过事务 API 与唯一 ID 去重的组合,平衡可靠性与系统性能。

奶爸的编程之路,也就一周冷个三天 170

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Java CyclicBarrier

在本文中,我们将介绍Java中的CyclicBarrier。在Java 5中,CyclicBarrier与其他并发实用程序(如CountDownLatch,ConcurrentHashMap和BlockingQueue)一起引入。 CyclicBarrier是同步的辅助工具,它允许线程集在公共的屏障点处彼此等待。之所以称为循环的,是因为一旦释放等待的线程,它便可以重用。 例如: 假设您有3个线程,您希望所有线程(称为当事人)达到一个共同点,然后只有它们才可以继续前进。在这种情况下,您可以将Cyclic

allway2的博客 208

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java并发工具之CyclicBarrier

一、简介 摘自《Java并发编程的艺术》一书中 CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。 CyclicBarrier,一个同步辅助类,在API中是这么介绍的: 它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,

weixin_41951205的博客 2339

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

java并发-CyclicBarrier使用

它是 Java 中用于多线程同步的一个工具类,它允许一组线程互相等待,直到所有线程都达到某个屏障点(barrier),然后再同时执行。

大乐乐 1851

cyclicbarrier java_Java并发实例之CyclicBarrier的使用

最近一直整并发这块东西,顺便写点Java并发的例子,给大家做个分享,也强化下自己记忆,如果有什么错误或者不当的地方,欢迎大家斧正。CyclicBarrier是一种多线程并发控制实用工具,和CountDownLatch非常类似,它也可以实现线程间的计数等待,但是它的功能比CountDownLatch更加复杂且强大。CyclicBarrier的介绍CyclicBarrier 的字面意思是可循环(Cyc...

weixin_33321522的博客 212

java的CyclicBarrier使用

假设有一个场景:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待。 public class UseCyclicBarrier { static class Runner implements Runnable { private CyclicBarrier barrier; private String name; public Runner(Cyclic...

秃了也弱了 6400

cyclicbarrier_Java并发– CyclicBarrier示例

cyclicbarrier Java中的CyclicBarrier是JDK 5中在java.util.Concurrent包上引入的同步器,以及其他并发实用程序,例如Counting Semaphore , BlockingQueue , ConcurrentHashMap等。CyclicBarrier与CountDownLatch类似,我们在上一篇文章中看到过,它允许多个线程等待彼此(障碍...

最佳 Java 编程 177

什么是 Java 的 CyclicBarrier?

类名作用:让一组线程在到达共同的屏障点(barrier point)时等待,直到所有线程都到达后,屏障打开,所有线程继续执行。核心特性指定参与线程数(parties)。可选的屏障动作(barrier action),在所有线程到达后执行。可重用,屏障打开后可重新进入等待状态。

qq_63553317的博客 816

【转】-Java并发之CyclicBarrier

但是其他运动员都领会的裁判正确的指令,剩余的运动员在起跑线上无限地等待下去,并且裁判看到运动员没有到齐,也不会打发令枪。屏障是多线程各自做自己的工作,如果某一线程完成了工作,就等待在屏障那里,直到其他线程的工作都完成了,再一起做别的事。运动员在赛跑的时候都会准备一段时间,当裁判发现所有的运动员都准备完毕的时候,就举起发令枪,比赛开始。相反,它跟条件变量一样,是用来协同多线程一起工作的。,它将在给定数量的参与者(线程)处于等待状态时启动,并在启动 barrier 时执行给定的屏障操作,该操作由最后一个进入。

booleandev 871
上一篇: Java CountDownLatch 使用
下一篇: Java线程池详细理解
思维的深度
博客等级 码龄11年 2万+粉丝 391原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值