• CyclicBarrier:栅栏的概念,多线程的进行阻塞,等待某一个临界值条件满足后,同时执行
  • 类比:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待
package com.example.core.juc;import java.util.Random;
import java.util.concurrent.*;public class UseCyclicBarrier {static class Runner implements Runnable{private String name;private CyclicBarrier cyclicBarrier;public Runner(String name,CyclicBarrier cyclicBarrier){this.name = name;this.cyclicBarrier = cyclicBarrier;}@Overridepublic void run(){try {System.out.println("运动员:" +this.name +", 进行准备工作");Thread.sleep(1000*(new Random()).nextInt(10));//模拟每一个运动员的休整时间System.out.println("运动员:"+this.name +",准备OK!");this.cyclicBarrier.await();//只有所有运动员都休整完毕,才会同时启动}catch(InterruptedException e){e.printStackTrace();}catch(BrokenBarrierException e){e.printStackTrace();}System.out.println("运动员:"+this.name+",Go!Go!Go!");}}public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(3);//线程池ExecutorService executorService = Executors.newFixedThreadPool(3);executorService.submit(new Thread(new Runner("张三",cyclicBarrier)));executorService.submit(new Thread(new Runner("里斯",cyclicBarrier)));executorService.submit(new Thread(new Runner("王武",cyclicBarrier)));executorService.shutdown();//关闭线程池}
}
/*
运动员:张三, 进行准备工作
运动员:王武, 进行准备工作
运动员:里斯, 进行准备工作
运动员:张三,准备OK!
运动员:里斯,准备OK!
运动员:王武,准备OK!
运动员:张三,Go!Go!Go!
运动员:王武,Go!Go!Go!
运动员:里斯,Go!Go!Go!
*/
  • 适用于如下情况,外部请求调用的函数由四部分组成,分别是1、2、3和4,第4部分需要1、2和3的结果作为输入值,并且他们将数据传给4的时间是不同的,所以4需要等待最慢的结果(短板效应),因此,最慢的也是我们今后的突破口

Java JUC工具类--CyclicBarrier相关推荐

  1. Java JUC工具类--ForkJoin

    ForkJoin Fork/Join框架是JAVA7提供的一个用于并行执行任务的框架,是一个把大任务分割成若干个小任务,最终汇总每个小任务结果后得到大任务结果的框架 Fork/Join中两个重要的类 ...

  2. Java JUC工具类--Future

    Future模式,也是非常经典的设计模式,这种模式主要就利用空间换时间的概念,也就是说异步执行(需要开启一个新的线程) 在互联网高并发的应用服务中,我们随处可见这种理念和代码,主要就是使用了这种模式 ...

  3. Java JUC工具类--Semaphore

    Semaphore 在Semaphore信号量非常适合高并发访问限制,新系统在上线之前,要对系统的访问量进行评估,评估是经过以往的经验.数据.历年的访问量,已经推广力度进行一个合理的评估 当然评估标准 ...

  4. Java JUC工具类--Master-Worker

    Master-Worker Master-Worker模式是常用的并行计算模式.它的核心思想是系统由两类进程协作工作:Master进程和Worker进程 Master负责接收和分配任务,Worker负 ...

  5. Java JUC工具类--Exchanger

    Exchanger Exchanger用于进行线程间的数据交换,它提供一个同步点,在这个同步点,两个线程可以交换彼此的数据 两个线程通过exchange方法交换数据,如果一个线程先执行exchange ...

  6. Java JUC工具类--CountDownLatch

    CountDownLatch:用于监听某些初始化操作,并且线程进行阻塞,等初始化执行完毕后,通知主线程继续工作执行 package com.example.core.juc;import java.u ...

  7. Java并发工具类--CyclicBarrier详解

    CyclicBarrier允许一组线程在到达某个栅栏点(common barrier point)互相等待,直到最后一个线程到达栅栏点,栅栏才会打开,处于阻塞状态的线程恢复继续执行. 举例 举个例子来 ...

  8. Java并发工具类(闭锁CountDownLatch)

    并发工具类系列: Java并发工具类(闭锁CountDownLatch) Java并发工具类(栅栏CyclicBarrier) Java并发工具类(信号量Semaphore) 闭锁是一种同步工具类,可 ...

  9. 彻底理解Java并发:Java并发工具类

    本篇内容包括:Java 并发工具类的介绍.使用方式与 Demo,包括了 CountDownLatch(线程计数器).CyclicBarrier(回环栅栏).Semaphore(信号量) 以及 Exch ...

最新文章

  1. C++__min_element()和max_element()函数的使用
  2. Java提升篇——equals()方法和“==”运算符
  3. 【python数据挖掘课程】二十五.Matplotlib绘制带主题及聚类类标的散点图
  4. 2010-04-01 4over6tunnel配置——折腾了一天
  5. 超详细讲解,带你零基础入门 kafka!
  6. 图解Team Foundation Server 2013系列
  7. ASP人事工资管理系统毕设
  8. 软Raid5,LVM,3T大硬盘纠缠操作的问题
  9. IE6的3像素神奇bug:缘起与解决方案
  10. clamp.js 的使用---超出省略 (翻译)
  11. a4b5笔记本大小对比_2L大小的迷你电脑上班拎着走
  12. 一个迅速崛起的国产开源OCR项目!
  13. 用Python手撕一个批量填充数据到excel表格的工具,解放双手!
  14. [工作必备]pandas数据分析处理52个常用技巧
  15. 如何清除远程桌面连接记录
  16. mri计算机系统,MRI的一些基本介绍
  17. 支付宝生活号开发中所遇到的困难及解决记录
  18. 查找斐波纳契数列中第 N 个数
  19. oracle apex ajax process + dy 校验
  20. python进阶学习--- django框架解析 ---领悟编程语言共性与特性【后续详解】

热门文章

  1. 是网关吗_智能家居网关功能这么多,你都知道吗?
  2. 联想一体机电源键不亮_联想电脑一体机B505拆机经验
  3. $_server['php_self'] 漏洞,Discuz! $_SERVER['PHP_SELF'] XSS Vulnerability
  4. 【转】应用架构之道:分离业务逻辑和技术细节
  5. [你必须知道的.NET]第十七回:貌合神离:覆写和重载
  6. 老王说ros的tf库
  7. java异或_JAVA面试必备之HashMap必会点
  8. JAVA的Future类
  9. Python 数据分析三剑客之 Matplotlib(四):线性图的绘制
  10. java不用插件播放媒体文件_java servlet不用插件上传文件: