java 栅栏(CyclicBarrier)

Java中的栅栏(CyclicBarrier)是一种用于协调多个线程并发工作的同步辅助类。与CountDownLatch不同,CyclicBarrier允许一组线程相互等待,直到所有线程都到达一个共同的屏障点(barrier)后,才继续执行。CyclicBarrier的主要特点是可以重复使用,因此适用于需要多个阶段的任务同步。
在这里插入图片描述
示例代码:

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;public class CyclicBarrierWithActionExample {public static void main(String[] args) {int threadCount = 3;CyclicBarrier barrier = new CyclicBarrier(threadCount, new BarrierAction());for (int i = 0; i < threadCount; i++) {new Thread(new TaskWithAction(barrier)).start();}}
}class BarrierAction implements Runnable {@Overridepublic void run() {System.out.println("所有线程都到达屏障点,执行barrierAction。");}
}class TaskWithAction implements Runnable {private final CyclicBarrier barrier;TaskWithAction(CyclicBarrier barrier) {this.barrier = barrier;}@Overridepublic void run() {try {System.out.println(Thread.currentThread().getName() + " 正在执行任务...");// 模拟任务执行Thread.sleep((long) (Math.random() * 1000));System.out.println(Thread.currentThread().getName() + " 到达屏障点。");barrier.await(); // 等待其他线程到达屏障点System.out.println(Thread.currentThread().getName() + " 继续执行。");} catch (InterruptedException | BrokenBarrierException e) {e.printStackTrace();}}
}

在这个例子中,当所有线程都到达屏障点时,会首先执行BarrierAction中的任务,然后再继续执行线程的后续代码。

一个模拟多阶段的任务,每个阶段所有线程都需要同步后才能进入下一个阶段。每个阶段完成后,还会执行一个额外的屏障操作。

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;public class MultiStageTaskExample {public static void main(String[] args) {int threadCount = 4;int stageCount = 3;CyclicBarrier barrier = new CyclicBarrier(threadCount, new BarrierAction());for (int i = 0; i < threadCount; i++) {new Thread(new Worker(barrier, stageCount)).start();}}
}class Worker implements Runnable {private final CyclicBarrier barrier;private final int stageCount;Worker(CyclicBarrier barrier, int stageCount) {this.barrier = barrier;this.stageCount = stageCount;}@Overridepublic void run() {try {for (int stage = 1; stage <= stageCount; stage++) {// 模拟每个阶段的任务System.out.println(Thread.currentThread().getName() + " 正在执行第 " + stage + " 阶段任务...");Thread.sleep((long) (Math.random() * 1000)); // 模拟任务执行时间// 等待其他线程到达屏障点System.out.println(Thread.currentThread().getName() + " 到达第 " + stage + " 阶段屏障点。");barrier.await();}} catch (InterruptedException | BrokenBarrierException e) {e.printStackTrace();}}
}class BarrierAction implements Runnable {@Overridepublic void run() {System.out.println("所有线程都已到达屏障点,准备进入下一阶段...");}
}

在这里插入图片描述
在这里插入图片描述
跳转到:
CountDownLatch
信号量(Semaphore)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/42662.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CSS 【详解】样式选择器(含ID、类、标签、通配、属性、伪类、伪元素、Content属性、子代、后代、兄弟、相邻兄弟、交集、并集等选择器)

CSS 样式选择器&#xff0c;用于选中页面中的 html 元素&#xff0c;以便添加 CSS 样式。 按渲染性能由高到低 依次是&#xff1a; ID 选择器 #id 通过元素的 id 属性选中元素&#xff0c;区分大小写 <p id"p1" >第一段</p>#p1{color: red; }但不推荐使…

【LinuxC语言】手撕Http之处理POST请求

文章目录 前言声明POST的组成读取POST信息读取消息体长度读取消息体解析消息体How to use?总结前言 在互联网的世界中,HTTP协议无疑是最重要的协议之一。它是Web的基础,支持着我们日常生活中的大部分在线活动。尽管有许多现成的库可以处理HTTP请求,但了解其底层工作原理是…

全面解析:儿童编程等级考试及其区别

目录 1. 前言2. 儿童编程等级考试的重要性3. 儿童编程等级考试的特点4. 儿童编程等级考试4.1 非专业级软件能力认证(CSP-J/S)4.2 GESP编程能力等级认证4.3 青少年编程能力等级测试(CPA)4.4 全国青少年软件编程等级考试4.5 全国青少年编程能力等级考试(PAAT)1. 前言 近年来…

【学习笔记】Mybatis-Plus(四):MP中内置的插件

内置插件 目前MP已经存在的内部插件包括如下&#xff1a; 插件类名作用PaginationInnerInterceptor分页插件。可以代替以前的PageHelperOptimisticLockerInnerInterceptor乐观锁插件。用于幂等性操作&#xff0c;采用版本更新记录DynamicTableNameInnerInterceptor动态表名Te…

【Rust】Cargo介绍

一、Cargo简介 Cargo 是Rust语言的包管理工具&#xff0c;它帮助我们管理我们项目的依赖。做js开发的同学应该了解nodejs的包管理工具npm&#xff0c;Cargo和npm做的事情是一样的。C和C的同学可能对这个就比较陌生了&#xff0c;C/C语言没有统一的依赖管理工具&#xff0c;各个…

Spring中常见知识点及使用

Spring Framework 是 Java 生态系统中最流行的开源框架之一&#xff0c;它提供了一系列强大的功能&#xff0c;用于构建企业级应用。以下是一些常见的 Spring 知识点及其使用方法&#xff1a; 1. 依赖注入&#xff08;Dependency Injection&#xff09; 依赖注入是 Spring 的…

【SpringCloud应用框架】Nacos集群架构说明

第六章 Spring Cloud Alibaba Nacos之集群架构说明 文章目录 前言一、Nacos支持三种部署模式二、集群部署说明三、预备环境 前言 到目前为止&#xff0c;已经完成了对Nacos的一些基本使用和配置&#xff0c;接下来还需要了解一个非常重要的点&#xff0c;就是Nacos的集群相关的…

【芯片制造】【问题整理】明场检测和暗场检测

背景&#xff1a; 什么是明场检测和暗场检测 主要功能&#xff1a; 1、在明场检测中&#xff0c;光源直接照射到样品表面&#xff0c;透射光或反射光被收集并成像。样品上的颗粒、划痕、凹坑会改变光的反射和透射&#xff0c;形成对比&#xff0c;能够快速扫描大面积样品。 2、…

SAP - 初识

人过三十不学艺&#xff1b;活到老学到老。。。。。。 怎么说都有理&#xff0c;说不如做 低头做事&#xff0c;抬头看天 先做&#xff0c;至少了解下是个什么&#xff1f; 1. SAP是什么 https://www.sap.cn/ -- 思爱普中国 https://www.sap.cn/about/wha…

金斗云 HKMP智慧商业软件 任意用户创建漏洞复现

0x01 产品简介 金斗云智慧商业软件是一款功能强大、易于使用的智慧管理系统,通过智能化的管理工具,帮助企业实现高效经营、优化流程、降低成本,并提升客户体验。无论是珠宝门店、4S店还是其他零售、服务行业,金斗云都能提供量身定制的解决方案,助力企业实现数字化转型和智…

无人机遥控器指令加密方法

遥控信息的安全问题是无人机遥控系统设计和任务实施过程中最重要的问题之一。然而日益发展的电子侦察和电子对抗技术&#xff0c;使第三方可以截获已方所发送的遥控指令&#xff0c;分析和窃取遥控信息的内容&#xff0c;从而伪造遥控信息&#xff0c;对己方无人机构成严重威胁…

12.x86游戏实战-汇编指令and or not

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 本次游戏没法给 内容参考于&#xff1a;微尘网络安全 上一个内容&#xff1a;11.x86游戏实战-汇编指令add sub inc dec and指令是与的意思 or指令是或的意思 …

MUX VLAN实现二层流量的弹性管控

一、模拟场景&#xff0c;企业有一台服务器&#xff0c;部门A&#xff0c;部门B&#xff0c;访客 二、要求&#xff1a;三者都可以访问服务器&#xff0c;部门A和B可以进行部门内部通信&#xff0c;A和B不可以通信&#xff0c;访客只能访问服务器 三、拓扑如下图 四、配置流程…

计算机网络编程和并发的知识

OSI七层协议 OSI&#xff08;Open Systems Interconnection&#xff09;模型是一个七层的网络通信模型&#xff0c;用于标准化不同层级的网络通信。从下到上分别是&#xff1a; 物理层&#xff08;Physical Layer&#xff09;&#xff1a;负责在物理媒介上传输原始的比特流。…

springcloud 面试经常被问问题

Spring Cloud 是一个基于 Spring Boot 的微服务架构解决方案&#xff0c;包含了许多用于构建和管理微服务的工具和框架。在面试中&#xff0c;与 Spring Cloud 相关的问题通常会涉及其核心概念、组件、常用模式和解决方案。以下是一些在 Spring Cloud 面试中经常被问到的问题及…

Linux系统(Centos)下MySQL数据库中文乱码问题解决

问题描述&#xff1a;在进行数据库使用过程中&#xff0c;数据库里的数据中文都显示乱码。操作数据库的时候&#xff0c;会出现中文乱码问题。 解决方法如下&#xff1a; 第一步&#xff1a;打开虚拟机进入系统&#xff0c;启动MySQL。 第二步&#xff1a;连接登录MySQL输入…

Java面试题系列 - 第4天

题目&#xff1a;深入理解Java泛型与类型擦除 背景说明&#xff1a;Java泛型是Java SE 5引入的一种新特性&#xff0c;它允许在编译时检查类型安全&#xff0c;并且所有的强制转换都是自动和隐式的&#xff0c;提高了代码的重用率。然而&#xff0c;Java泛型的实现背后有一个重…

执行力不足是因为选择模糊

选择模糊&#xff1a;执行力不足的根源 选择模糊是指在面对多个选项时&#xff0c;缺乏明确的目标和方向。这种模糊感会导致犹豫不决&#xff0c;进而影响我们的执行力。 选择模糊的表现&#xff1a; 目标不明确&#xff0c;不知道应该做什么。优先级混乱&#xff0c;不清楚…

Docker-12 Docker常用命令

一、查看docker版本信息 docker version # 查看Docker版本信息二、启动/停止docker 服务 systemctl start docker # 启动 docker 服务 systemctl stop docker # 停止 docker 服务三、镜像命令 docker images # 查看镜像 docker search 镜像名称 # 搜索镜像…

分布式技术栈、微服务架构 区分

1.分布式技术栈 这些技术栈都是为了更好的开发分布式架构的项目。 &#xff08;大营销平台的系统框架如下图&#xff0c;扩展的分布式技术栈&#xff09; &#xff08;1&#xff09;Dubbo——分布式技术栈 DubboNacos注册中心是应用可以分布式部署&#xff0c;并且提供RPC接…