Java CyclicBarrier的用法

学技术学英文:java CyclicBarrier 和 CountDownLatch用法区别,举例生动看完不会忘 CyclicBarrier 和CountDownLatch 都是java中让线程阻塞等待的,CountDownLatch是父线程等待,CyclicBarrier是子线程等待。 阅读详情

CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。

使用的场景:保证所有的线程同一时间开始执行相关的代码。

测试代码如下:


 1 public class TestCyclicBarrier {
 2 
 3     private static final int THREAD_NUM = 5;
 4     
 5     public static class WorkerThread implements Runnable{
 6 
 7         CyclicBarrier barrier;
 8         
 9         public WorkerThread(CyclicBarrier b){
10             this.barrier = b;
11         }
12         
13         @Override
14         public void run() {
15             // TODO Auto-generated method stub
16             try{
17                 System.out.println("Worker's waiting");
18                 //线程在这里等待,直到所有线程都到达barrier。
19                 barrier.await();
20                 System.out.println("ID:"+Thread.currentThread().getId()+" Working");
21             }catch(Exception e){
22                 e.printStackTrace();
23             }
24         }
25         
26     }
27     
28     /**
29      * @param args
30      */
31     public static void main(String[] args) {
32         // TODO Auto-generated method stub
33         CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() {
34             //当所有线程到达barrier时执行
35             @Override
36             public void run() {
37                 // TODO Auto-generated method stub
38                 System.out.println("Inside Barrier");
39                 
40             }
41         });
42         
43         for(int i=0;i<THREAD_NUM;i++){
44             new Thread(new WorkerThread(cb)).start();
45         }
46     }
47 
48 }
49 /*
50 以下是输出:
51 Worker's waiting
52 Worker's waiting
53 Worker's waiting
54 Worker's waiting
55 Worker's waiting
56 Inside Barrier
57 ID:12 Working
58 ID:8 Working
59 ID:11 Working
60 ID:9 Working
61 ID:10 Working
62 */

  1.  CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。 
  2.  CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。 
  3.  CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
【JUC】循环屏障CyclicBarrier详解 jdk中提供了许多的并发工具类,大家可能比较熟悉的有,主要用来阻塞一个线程运行,直到其他线程运行完毕。而jdk还有一个功能类似并发工具类,你知道它的作用吗?和有什么区别呢?对于CountDownLatch不了解的可以参考# CountDownLatch源码硬核解析,循环屏障,用来进行线程协作,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,会触发自己运行,运行完后,屏障又会开门,所有被屏障拦截的线程又可以继续运行。所以是可以重用的。 阅读详情

相关推荐

java CountDownLatch、CyclicBarrier和 Semaphore用法

一.CountDownLatch用法   CountDownLatch类位于java.util.concurrent中包下,利用它可以实现类似计数器的功能。比如有一个任务A,它要等待其他4个任务执行完毕之后才能执行,此时就可以利用CountDownLatch来实现这种功能了。   CountDownLatch类只提供了一个构造器: public CountDownLatch(int cou...

gmHappy 6572

Java并发工具CyclicBarrier使用详解

CyclicBarrier是一个同步器,允许一组线程相互之间等待,直到到达某个公共屏障点 (common barrier point),再继续执行。因为`CyclicBarrier` 的计数器是可以循环利用的,所以称它为循环(Cyclic) 的 Barrier。 CyclicBarrier常用于多线程计算数据,当所有线程都完成执行后,在`CyclicBarrier`回调线程中合并计算。

warybee 2052

STM32实战指南:TFTLCD液晶屏驱动与ILI9341应用解析

本文详细解析了STM32驱动TFTLCD液晶屏的实战技巧,重点介绍了ILI9341控制器的硬件连接、寄存器操作及性能优化方法。通过8080并行接口时序分析、GRAM操作优化和DMA传输应用,帮助开发者高效实现液晶屏驱动,适用于工业控制、智能家居等场景。

weixin_26873711的博客 232

JUC工具类: CyclicBarrier详解

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

qq_63353796的博客 1027

基于稀疏表示字典学习的图像超分辨率-杨建超论文解析

文章:《Image Super-Resolution via Sparse Representation》 作者:杨建超 信号稀疏的定义: 令字典D的原子个数M,信号维度为N,则有以下三种关系: M = N时,D为完备的; M > N时,D为冗余的; M>>N时, D为过完备的。 图解如下: 借鉴了压缩感知的思想,通过对大量低分辨率图像和高分辨...

ycc18829026593的博客 7637

基于PSIM仿真的单相全桥逆变电路

根据单极性SPWM调制电路、双极性SPWM调制电路和逆变器拓扑可以得到完整的逆变器仿真电路模型。

weixin_59329579的博客 1万+

JAVA同步器CyclicBarrier

CyclicBarrier(循环屏障)是 Java 并发包中用于 多线程协同 的工具类,允许多个线程相互等待,直到所有线程都到达某个屏障点(Barrier)后,再继续执行后续任务。其核心特点是 可重复使用,与 CountDownLatch 的一次性特性形成对比。

xiaowangbadan0_0的博客 1177

MTK Linux DRM分析(八)- KMS drm_crtc.c

CRTC 在 Linux DRM 子系统中是显示控制的核心,负责时序生成、模式设置和管线的调度。理解其工作原理和 API 对于进行底层图形开发、调试显示问题或 simply understanding how your graphics stack works 都至关重要。

iTom1900 1349

Java并发工具之CyclicBarrier

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

weixin_41951205的博客 2338

MATLAB离线附加功能包下载与安装教程

本文介绍如何下载与安装MATLAB离线附加功能包,便于大家更加高效的使用MATLAB。

加斯顿工程师的博客 1万+

AIGC算法工程师面试八股文深度解析与进阶指南:揭秘Diffusion Models核心原理与实战技巧

总结来说,Cosine Noise Scheduler 的核心优势在于它能够更巧妙地平衡信号和噪声的比例,在扩散过程的早期阶段更长时间地保留原始图像的细节信息,从而为去噪模型提供一个更友好的学习环境,最终带来更优异的生成质量。🚀

FJN110的博客 344

java中CyclicBarrier的简单用法

CyclicBarrier 和 CountDownLatch 都可以用来让一组线程等待其它线程。与 CyclicBarrier 不同的是,CountdownLatch 不能重新使用。 1 public class TestCyclicBarrier { 2 3 private static final int THREAD_NUM = 5; 4 5 p

sh_c1991的专栏 734

DeepSeek 赋能招投标全流程智能化:多模态解析、知识图谱与投标文件自动生成实战指南(附完整代码与行业案例)

摘要:本文深入探讨DeepSeek技术在招投标领域的全流程智能化应用,通过整合自然语言处理(NLP)、多模态解析、知识图谱等核心技术,实现招标文件智能解析与投标文件自动生成。文中详细解析DeepSeek-R1模型的多模态处理机制、动态知识图谱构建方法及智能模板填充算法,通过完整代码实现展示技术细节。结合广某资源交易平台、山西XX"XX云"等典型案例,验证技术方案在提升招投标效率、降低人为错误方面的显著效果。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1463

java CyclicBarrier的用法

CyclicBarrier:CyclicBarrier的字面意思是可循环(Cyclic) 使用的屏障(barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫做同步点)时被阻塞,知道最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活,线程进入屏障通过CyclicBarrier的await()方法。 场景:假设我们现在有7个人开会,必须要7个人全部到齐才能开始会...

Zhang895341748的专栏 252

流媒体之LL-HLS 低延时HLS协议

LL-HLS协议通过扩展了HLS协议,为实时直播场景提供了更丰富的功能,如延迟控制、播放列表增量更新、阻止播放列表重新加载等。同时客户端可以更灵活地控制播放列表的加载和播放,以适应各种场景和需求。LL-HLS在直播中的延时可以控制在3s内, 但是即使这样, 还是不如RTMP, RTSP等协议的实时性。

技术控的笔记 3364

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

java中CyclicBarrier的用法

可以用于创建同步点,使多个线程相互等待,只有当所有线程都达到同步点时,才能继续执行后续操作。它可以用于解决并发任务中的协调问题,例如需要等到多个线程完成某些操作后才能进行下一步操作。

m0_61366135的博客 279

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

请解释Java中的CountDownLatch、CyclicBarrier和Semaphore的用法?

在Java的并发编程中,CountDownLatch、CyclicBarrier和Semaphore都是重要的同步工具类,它们各自用于不同的场景,帮助协调多个线程的执行顺序。它维护了一个计数器,当计数器的值减至0时,表示一组线程中的最后一个线程已经完成了任务,此时等待的线程将不再阻塞,可以继续执行。在需要等待的线程中调用CountDownLatch的await()方法,该方法会阻塞当前线程,直到计数器的值减至0。在每个线程中,当需要等待其他线程时,调用CyclicBarrier的await()方法。

weixin_53180424的博客 976

jre9下载 jdk9

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

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

java CyclicBarrier用法

CyclicBarrier主要用于等待一组线程都执行到某个时刻。 它和CountDownLatch的区别:CountDownLatch用在等待某个事件,而CountDownLatch用于等待线程。 CountDownLatch用于一个或者多个线程等待其他一组线程。 CyclicBarrier用于一组线程之间的相互等待。 下面是一个例子: [code="java"] public cla...

一木一草一枯荣 252

JAVA多线程并发(CyclicBarrier、CountDownLatch、Semaphore 的用法)

CountDownLatch(线程计数器 ) CountDownLatch 类位于 java.util.concurrent 包下,利用它可以实现类似计数器的功能。比如有一个任务 A,它要等待其他 4 个任务执行完毕之后才能执行,此时就可以利用 CountDownLatch来实现这种功能了。 final CountDownLatch latch = new CountDownLatch(2); new Thread(){ public void run() { System

Mr權 337

【JAVA】java中CyclicBarrier的用法,实例讲解

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

三也_攻城狮 4511

Java中CyclicBarrier的用法

CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。 用法略有不同,测试代码如下: public class TestCyclicBarrier { private static final int THREAD_NUM = 5; public static class WorkerThread implements Runn

曹浩洋的专栏 516

谈谈java中CyclicBarrier的用法

谈谈java中CyclicBarrier(栅栏)的用法

drawthink的专栏 816

Java多线程之CyclicBarrier用法

Java多线程之CyclicBarrier用法 本文目录 CyclicBarrier的基本概念 CyclicBarrier的案例:集齐7颗龙珠就可以召唤神龙 1. CyclicBarrier的基本概念 CyclicBarrier的字面意思是可循环(Cyclic)使用的屏障(Barrier)。它要做的事情是: 1. 让一组线程到达一个屏障(也可以叫同步点)时被阻塞, 直到最后一个线程到达屏障...

努力努力再努力L 420

java:CyclicBarrier用法

CountDownLatch和CyclicBarrier都能够实现线程之间的等待,只不过它们侧重点不同:     CountDownLatch一般用于某个线程A等待若干个其他线程执行完任务之后,它才执行;     而CyclicBarrier一般用于一组线程互相等待至某个状态,然后这一组线程再同时执行;     另外,CountDownLatch是不能够重用的,而CyclicBarrier是可以重用的。 第一个例子: 假若有若干个线程都要进行写数据操作,并且只有所有线程都完成写数据操作之后,.

zhuchunyan_aijia的博客 252

Java中的CyclicBarrier 用法

/** * cyclicBarrier 用法 */ private static CyclicBarrier barrier = new CyclicBarrier(2,() ->{ System.err.println("屏障完成!"); }); public static void main(String[] args) { ExecutorService executorService = Executors.new.

多头注意力探索Now 323

浅谈Java中CyclicBarrier的用法

CyclicBarrier和CountDownLatch一样,都是关于线程的计数器。 用法略有不同,测试代码如下: public class TestCyclicBarrier { private static final int THREAD_NUM = 5; public static class WorkerThread implements Runn

赶路人儿 612
上一篇: java 不可变对象
下一篇: Java中CountDownLatch的用法
大树叶
博客等级 码龄12年 1171粉丝 664原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值