一、概述

CyclicBarrier的中文是循环栅栏的意思,该工具类会像栅栏一样,把线程拦住(阻塞),当拦住的线程的数量达到预定设置的值之后,会将阻塞的线程全部唤醒。循环是指CyclicBarrier可以重复使用,而CountDownLatch只能使用一次

二、常用方法

CyclicBarrier(int parties) : 构造函数,指定计数器中的值
await() throws InterruptedException, BrokenBarrierException :阻塞当前线程,阻塞的线程数+1,当阻塞的线程数达到计数器中设定的值,将会唤醒。

三、案例

public class Demo {public static void main(String[] args) {int count = 5;CyclicBarrier cyclicBarrier = new CyclicBarrier(count);for (int i = 1; i <=count ; i++) {Thread t = new Thread(()->{//随机沉睡时间int time = (int)(Math.random()*10+1);try {TimeUnit.SECONDS.sleep(time);System.out.println(Thread.currentThread().getName()+"执行业务"+time+"秒,达到终点,等待其他线程");cyclicBarrier.await();System.out.println(count+"个线程全部到达终点,"+Thread.currentThread().getName()+"继续往下执行");} catch (InterruptedException | BrokenBarrierException e) {e.printStackTrace();}});t.setName("线程"+i);t.start();}System.out.println("mian线程执行完毕");}
}

执行结果:

mian线程执行完毕
线程4执行业务1秒,达到终点,等待其他线程
线程3执行业务1秒,达到终点,等待其他线程
线程1执行业务3秒,达到终点,等待其他线程
线程2执行业务7秒,达到终点,等待其他线程
线程5执行业务10秒,达到终点,等待其他线程
5个线程全部到达终点,线程5继续往下执行
5个线程全部到达终点,线程2继续往下执行
5个线程全部到达终点,线程1继续往下执行
5个线程全部到达终点,线程3继续往下执行
5个线程全部到达终点,线程4继续往下执行

JUC:06.CyclicBarrier栅栏相关推荐

  1. 聊聊高并发(三十)解析java.util.concurrent各个组件(十二) 理解CyclicBarrier栅栏

    这篇讲讲CyclicBarrier栅栏,从它的名字可以看出,它是可循环使用的.它的功能和CountDownLatch类似,也是让一组线程等待,然后一起开始往下执行.但是两者还是有几个区别 1. 等待的 ...

  2. CyclicBarrier(栅栏)实现高并发测试

    public class TestCyclic {@Testpublic void test01() {int count = 10000;//并发线程数CyclicBarrier cyclicBar ...

  3. Java多线程通信-CyclicBarrier(栅栏)

    一.CyclicBarrier(栅栏) 通过闭锁,我们可以启动一组相关的操作.或者等待一组相关的操作结束.闭锁是一次性对象,到达终止状态后将不可用.     CyclicBarrier与闭锁类似,能够 ...

  4. 【代码】CyclicBarrier栅栏使用示例

    一批一批的放行. import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarri ...

  5. JUC锁-CyclicBarrier(七)

    CyclicBarrier介绍 CyclicBarrier是一个同步辅助类,允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point).因为该 barrier 在释放等 ...

  6. JAVA 并发编程之三:CountDownLatch(门闩)、CyclicBarrier(栅栏)和Semaphore(信号量) 三种并发策略

    在JDK的并发包中已经提供了几个非常有用的并发工具类.CountDownLatch.CyclicBarrier和Semaphore工具类中提供了一种并发流程控制的手段,Exchanger工具类提供了在 ...

  7. JUC系列——CyclicBarrier

    简介 上次简要介绍了 CountDownLatch ,CountDownLatch只能使用一次,想要循环使用我们就需要用CyclicBarrier. 方法类似 构造参数 N 仍为倒计时起始数据 cou ...

  8. java线程栅栏_Java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier)

    今天项目上遇到一个多线程任务问题,大概图文描述一下: 1.前端需要及时返回任务状态 2.后台开了一个任务线程去执行具体的业务,业务包括四个部分,四个部分全部完成才算完成 3.业务中某些耗时的或者需要多 ...

  9. java concurrent 栅栏,java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier)

    [一:java并发的开篇 1.在实际应用中,经常用到线程的并发,那为什么需要用到并发呢,不能独自单独的程序处理吗,那很明确的说,多条线程做完成一件事情和一条线程去完成 -闭锁(Latch) 闭锁(La ...

  10. juc是什么java_JUC简介

    JUC是什么 JUC是 在Java 5.0添加的 java.util.concurrent包的简称,目的就是为了更好的支持高并发任务, 让开发者利用这个包进行的多线程编程时可以有效的减少竞争条件和死锁 ...

最新文章

  1. js上传文件,上传表单demo 包含后端php
  2. Ext.Net学习笔记22:Ext.Net Tree 用法详解
  3. 简述Python的Numpy,SciPy和Pandas,Matplotlib的区别
  4. JavaScript---事件详解
  5. Entityframework Code First 系列
  6. 统计学习方法(—)——统计学习方法概念
  7. 基于MySQL和JavaFX的学生管理系统
  8. GCN、GAT、凸优化、贝叶斯、MCMC、LDA
  9. 正式开始学习GO语言
  10. 开店软件透彻分析推荐
  11. 什么软件可以搜C语言题答案,C语言题库(带答案)-排版Word版
  12. 最好听的男孩英文名字大全
  13. 数据结构实验一 顺序表的插入、删除
  14. 把握新航道,CSDN智能汽车技术路线图正式发布
  15. 流式上传文件到服务器磁盘,通过HTTP将数据从浏览器流式传输到服务器的方法...
  16. c语言windows程序设计-在windows中使用printf,Windows编程(4)-在Windows中使用printf
  17. Mina中的Snark Worker
  18. 阿里妈妈不能攻百度也不能守淘宝 !
  19. 访问Daytime服务的客户端(TCP)
  20. mybatis plus 看这篇就够了,一发入魂

热门文章

  1. 基因重组- 冲刺计划
  2. python使用turtle库绘制奥运五环
  3. QQ空间快速登录地址
  4. linux查看主机配置命令,如何查看Linux 硬件配置信息
  5. 西门子数控系统变量刀补输入——使用$TC_DP函数
  6. ciscn 2020 Misc the_best_ctf_game
  7. ipadpro尺寸的html,新一代全面屏iPad Pro发布,技术规格和尺寸来了!
  8. 如何解释静息态功能磁共振成像:询问你的参与者
  9. JavaScript 修改地址栏指定参数
  10. L1-031. 到底是不是太胖了