java编程思想笔记-并发之CyclicBarrier

【java】java 并发编程 CyclicBarrier 源码分析 文章目录1.概述4.源码阅读4.1 构造方法4.2 Generation4.3 属性Condition4.4 await方法4.4.1 BrokenBarrierException4.4.2 巨坑4.4.3 dowait4.4.3.1 校验阶段4.4.3.2 栅栏开启4.4.3.3 开启栅栏之前4.4.3.4 再次检测异常4.4.3.5 总体方法如下M.扩展阅读 1.概述 CyclicBarrier的使用参考:【高并发】JUC中的循环栅栏CyclicBarrier的6种使用场景 04-并发编程-Coun 阅读详情

CyclicBarrier和CountDownLatch类似,可以让一组任务并行的工作,然后在下一个步骤之前等待,直至所有的任务完成,但是CountDownLatch只触发一次事件,而CyclicBarrier可以多次重用

示例:
赛马游戏

class Horse implements Runnable{
    private static int counter=0;
    //赛马id
    private final int id=counter++;
    //总步长
    private int strides=0;
    private static Random random=new Random(47);
    //栅栏
    private static CyclicBarrier barrier;
    public Horse(CyclicBarrier b){
        barrier=b;
    }
    public synchronized int getStrides() {
        return strides;
    }
    @Override
    public void run() {
        try {
            while (!Thread.interrupted()) {
                synchronized (this) {
                    strides+=random.nextInt(3);
                }
                barrier.await();
            }
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (BrokenBarrierException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public String toString() {
        return "House "+id+" ";
    }

    public String tracks(){
        StringBuilder sb=new StringBuilder();
        for (int i = 0; i <getStrides(); i++) {
            sb.append("*");
        }
        sb.append(id);
        return sb.toString();
    }

}
public class HouseRace {
    static final int FINISH_LINE=75;
    private List<Horse>horses=new ArrayList<Horse>();
    private ExecutorService exec=Executors.newCachedThreadPool();
    private CyclicBarrier barrier;
    public HouseRace(int nHorses,final int pause){
        barrier=new CyclicBarrier(nHorses, new Runnable() {

            @Override
            public void run() {
                StringBuilder sb=new StringBuilder();
                for (int i = 0; i < FINISH_LINE; i++) {
                    sb.append("=");
                }
                System.out.println(sb);
                for (Horse horse : horses) {
                    System.out.println(horse.tracks());
                }
                for (Horse horse : horses) {
                    if (horse.getStrides()>=FINISH_LINE) {
                        System.out.println(horse+" won ");
                        exec.shutdownNow();
                        return ;
                    }
                }
                try {
                    TimeUnit.MILLISECONDS.sleep(pause);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        for (int i = 0; i < nHorses; i++) {
            Horse horse=new Horse(barrier);
            horses.add(horse);
            exec.execute(horse);
        }
    }
    public static void main(String[] args) {
        int nHorses=7;
        int pause=200;
        new HouseRace(nHorses, pause);
    }
}

所有的赛马线程每跑一次都被挂起,直到所有的赛马都处于栅栏处等待的时候,并且栅栏调用完barriarAction(CyclicBarrier初始化的第二个参数runnable)run()方法后,打破栅栏继续运行

通过WorkVisual连接KUKA机器人的具体方法 阅读详情

相关推荐

告别手动脚本!用TSMaster Python小程序5分钟搞定CAN报文自动发送

本文介绍了如何使用TSMaster的Python小程序功能快速实现CAN报文自动发送,大幅提升汽车电子测试效率。通过简洁的Python代码示例,展示了如何替代传统手动操作和复杂C脚本,实现周期性发送、动态修改报文内容等常见需求,帮助工程师5分钟内完成自动化配置。

weixin_30292843的博客 511

利用CyclicBarrier实现赛马游戏

赛马游戏 前言 最近在看CountDownLatch和CyclicBarrier相关的锁知识,看到网上有通过CyclicBarrier特性实现一个赛马游戏,觉得很有意思,就把他搬运过来。 背景 多匹马一起赛跑,每匹马每一次都可以跑随机个距离,看哪匹马最先到达终点。 代码 import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.CyclicBarrier; i

Yanyu_123的博客 301

华为AC外置Portal认证方案配置步骤指南

华为AC外置Portal认证方案配置步骤指南

m0_46129105的博客 7670

CyclicBarrier原理剖析:多线程协作的艺术与科学

CyclicBarrier(循环栅栏)是Java提供的同步辅助工具,允许一组线程互相等待,直至所有线程到达某个屏障点(Barrier Point)后,再同时继续执行。其名称中的"Cyclic"体现了可重复使用的特性,而"Barrier"则暗示了线程间的同步机制。同步不是简单的等待,而是对齐目标、协调节奏的艺术。它教会我们,在并发编程的世界里,真正的效率往往诞生于对"等待"的深刻理解与巧妙运用。关注我,获取更多技术干货~顶级程序员都在偷偷看的书单!免费领50+本技术神作。

程序员笔记 809

与rkipc通信

函数名称功能系统模块初始化系统模块反初始化重启恢复出厂设置导出日志导出配置文件导入配置文件系统升级获取用户数设置用户数获取用户权限设置用户权限获取用户名设置用户名获取密码(已加密)设置密码(已加密)新增用户删除用户。

qq_44643189的博客 1612

基于分位数回归的静态CoVaR计算 案例与代码

原文链接:https://bbs.pinggu.org/thread-7925441-1-1.html 一、静态CoVaR模型介绍 二、资料简介 实现对相关期刊论文进行论文重现,解决实证分析中的技术操作问题。里面包含了每一步详细的步骤,可以方便的利用这个手册解决大部分利用分位数回归计算静态CoVaR的论文的模型实现问题。即从数据下载到模型实现一整条操作步骤。 关键词:【分位数回归】【Co...

ChenQihome9的博客 7504

Java多线程: CyclicBarrier的使用

一. CyclicBarrier使用的场景 现在需要并行的执行一组任务,每一个任务都需要分阶段完成,并且任务不能抢先执行,当在某个阶段完成的时间过早时,需要等待其它任务全部完成这个阶段的工作后,才能一起向下一个阶段跃进。它与CountDownLatch很类似,只不过CountDownLatch只能触发一次(控制一次任务的阶段暂停),而CyclicBarrier如其名,可以触发...

爱喝咖啡的程序员的博客 362

DC算法竞赛——北京PM2.5浓度回归分析

北京PM2.5浓度回归分析 比赛结果(118/1150) 一. 概述 1、项目来源:https://www.dcjingsai.com/static_page/cmpList.html 2、给定数据字段如下: 3、使用方法:回归算法 4、目的:预测北京pm2.5值,使平均预测误差越小越好。 二、分析过程 setwd("E:/R数据源") #读入数据 data <- read.csv('p...

玻璃球的博客 3474

CyclicBarrier(循环栅栏)的工作原理及实例

一:CyclicBarrier的工作原理 CyclicBarrier 和 CountDownLatch 非常类似,它也可以实现线程间的技术等待,但是它的功能比 CountDownLatch 更加复杂和强大。主要应用场景和 CountDownLatch 类似。 CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可...

li-zhang-yu的博客 888

国产麒麟系统PXE安装-UEFI引导

注意: 适用uefi引导 适用x86_64架构 一键部署脚本扣我 1.上传ISO到PXE服务器,拷贝ISO文件 # mkdir /kylin_iso # mount -o loop Kylin-Server-10-SP1-Release-Build04-20200711-x86_64.iso /kylin_iso/ 2.配置http,获取安装源 # yum -y install httpd # mkdir /var/www/html/{ks,kylin} # 注意一定是"/kylin_iso/

河静 5054

n8n AI高效工作流自动化 部署使用教程

摘要: n8n是一款开源可视化工作流自动化工具,结合AI能力可高效解决重复性任务。文章详细介绍了从Docker部署到实战应用的完整流程:1)通过Docker Compose自托管n8n,确保数据可控;2)以AI客服日报机器人为例,演示如何串联工单系统、ChatGPT和邮件通知,实现定时自动化;3)进阶搭建交互式AI助手,利用ToolsAgent节点调用业务API;4)整合向量数据库构建RAG知识库问答。关键建议包括:拆分复杂工作流、严格管理凭据、区分开发与生产环境,并建议从高频刚性需求(如日报生成)切入,逐

专注AI大模型,软件混淆,授权 266

java多线程之CyclicBarrier

CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。 优点:可重用; 应用场景:多个线程达到一致条件后继续执行。 示例代码: CyclicBarrierTest类: public class CyclicBarrierTest { private CyclicBarrier cyclicBarrier = new CyclicBarri...

翻过一座座山 629

医疗数据采集:Python爬虫爬取医学文献与药品信息(2026合规与伦理版)

医疗数据采集不同于爬取新闻或房价,它直接关系到人的生命健康和法律底线。技术层面:优先使用官方 API (PubMed E-utilities, BioThings),避免解析复杂HTML。法律层面:严守“不碰隐私、不破付费、不传谣言”三条红线。伦理层面:保持对生命的敬畏,确保数据的准确性和用途的正当性。在2026年,一个优秀的医疗数据工程师,不是那个能爬取最多数据的人,而是那个能在合规框架下,利用公开数据解决真实医疗问题的人。请务必珍视您的职业生涯和法律责任,切勿以身试法。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 284

【2013-11-27】《Java编程思想》读书笔记:CyclicBarrier

《Java编程思想》读书笔记,展示 CyclicBarrier 的使用:三个 Player 线程各自运行,到达 Pos1 和 Pos2 两个屏障点时调用 await() 等待其他线程,所有线程到齐后统一继续执行,同时触发屏障回调打印汇聚信息。

cstriker1407的专栏 16

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

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

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

深入理解Java并发工具包中的CyclicBarrier

CyclicBarrier的字面意思是“可循环使用的屏障”。它允许一组线程互相等待,直到所有线程都到达一个公共的屏障点(或称为同步点)。在这个屏障点上,线程会被阻塞,直到所有参与的线程都到达这个点。一旦所有线程都到达屏障点,屏障就会被打开,允许所有线程继续执行。这个“循环”的概念意味着,一旦所有线程通过屏障,屏障就会自动重置,可以再次用于下一轮的线程同步。这使得CyclicBarrier非常适合于那些需要多次同步的场景。是Java并发包中提供的一个强大且灵活的同步工具类。

码到三十五 1万+

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【Java并发】辅助类CountDownLatch、CyclicBarrier、Semaphore

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

hrh的博客 3224

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Java并发工具之CyclicBarrier

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

weixin_41951205的博客 2338

【转】-Java并发之CyclicBarrier

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

booleandev 871

java并发-CyclicBarrier使用

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

大乐乐 1851

Java并发之CyclicBarrier

Java并发之CyclicBarrier一、CyclicBarrier简介二、让线程在CyclicBarrier中等待三、Barrier被破坏3.1 如果有线程已经处于等待状态,调用reset方法会导致已经在等待的线程出现BrokenBarrierException异常。并且由于出现了BrokenBarrierException,将会导致始终无法等待。3.2 如果在等待的过程中,线程被中断,也会抛...

爱是与世界平行 702

java并发之CyclicBarrier(障碍器)

CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。CyclicBarrier 支持一个可选的 Runnable 命令,在一

gongpulin的博客 2469

java并发编程之CountDownLatch与CyclicBarrier

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

u010185262的博客 6285

java常用的并发工具类-CyclicBarrier

CyclicBarrier 是 Java 并发包()中的一个同步辅助类。它允许一组线程互相等待,直到所有线程都到达一个公共的屏障点(barrier)。当最后一个线程到达时,屏障就会打开,所有线程可以继续执行。CyclicBarrier 可以被反复使用,即当线程们通过屏障后,它可以被重置并再次使用。CyclicBarrier 是 Java 并发编程中的重要工具类,用于在多线程环境中实现线程之间的同步。它允许一组线程在一个共同点等待,直到所有线程都到达后再继续执行。

Flying_Fish_roe的博客 1248

并发编程CyclicBarrier浅析

并发编程CyclicBarrier浅析

似霰的博客 1167
上一篇: MySQL优化之慢查询优化基础
下一篇: BlockingQueue的各种实现队列
光与热
博客等级 码龄10年 55粉丝 126原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值