https://my.oschina.net/wangmengjun/blog/782363
https://blog.csdn.net/hanchao5272/article/details/79779639
https://blog.csdn.net/qq_39241239/article/details/87030142

/**
* <p>CyclicBarrier-循环屏障-模拟多线程计算</p>** @author hanchao 2018/3/29 22:48**/
public static void main(String[] args) {//数组大小int size = 50000;//定义数组int[] numbers = new int[size];//随机初始化数组for (int i = 0; i < size; i++) {numbers[i] = RandomUtils.nextInt(100, 1000);}//单线程计算结果System.out.println();Long sum = 0L;for (int i = 0; i < size; i++) {sum += numbers[i];}LOGGER.info("单线程计算结果:" + sum);//多线程计算结果//定义线程池ExecutorService executorService = Executors.newFixedThreadPool(5);//定义五个Future去保存子数组计算结果final int[] results = new int[5];//定义一个循环屏障,在屏障线程中进行计算结果合并CyclicBarrier barrier = new CyclicBarrier(5, () -> {int sums = 0;for (int i = 0; i < 5; i++) {sums += results[i];}LOGGER.info("多线程计算结果:" + sums);});//子数组长度int length = 10000;//定义五个线程去计算for (int i = 0; i < 5; i++) {//定义子数组int[] subNumbers = Arrays.copyOfRange(numbers, (i * length), ((i + 1) * length));//盛放计算结果int finalI = i;executorService.submit(() -> {for (int j = 0; j < subNumbers.length; j++) {results[finalI] += subNumbers[j];}//等待其他线程进行计算try {barrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}});}//关闭线程池executorService.shutdown();
}

CyclicBarrier多线程相关推荐

  1. 关卡CyclicBarrier的使用

    2019独角兽企业重金招聘Python工程师标准>>> 有时线程之间需要同步.现有如下要求 多线程执行job的两个方法:所有doJob1()执行完之后,doJob2()才开始执行. ...

  2. 「冰河技术」部分精华文章分类汇总,P8架构师都在看的技术文章!!

    这次,我将 [冰河技术] 微信公众号的文章整理出来了,很多细节的点,可能想得不是很完善,大家可以去[冰河技术]公众号获取或者在公众号内回复[冰河]加我[微信]提意见(别忘记点赞哟). 原创文章每周更新 ...

  3. java线程栅栏_Java 多线程基础 - CyclicBarrier

    我的博客 转载请注明原创出处. 序 java.util.concurrent包里有几个能帮助人们管理相互合作的线程集的类,为多线程常见的应用场景预置了抽象好的类库.在遇到这些应用场景时应该直接重用合适 ...

  4. JUC 中的多线程协作工具类:CountDownLatch 和 CyclicBarrier

    点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 最近在学习 ...

  5. JAVA所有选手就位后比赛开始_Java多线程-CountDownLatch、CyclicBarrier、Semaphore

    上次简单了解了多线程中锁的类型,今天要简单了解下多线程并发控制的一些工具类了. 1. 概念说明: CountDownLatch:相当于一个待执行线程计数器,当计数减为零时表示所有待执行线程都已执行完毕 ...

  6. Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger

    一.引言 Semaphore               :一个计数信号量 CountDownLatch          :一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线 ...

  7. 【多线程】CountDownLatch 和 CyclicBarrier:如何让多线程步调一致?

    假设现在有一个对账系统,需要优化一下.它的基本业务是用户通过在线商城下单,然后生成电子订单,保存在订单库:之后物流会生成派送单给用户发货,派送单保存在派送单库.为了防止漏派送或重复派送,对账系统每天会 ...

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

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

  9. java 多线程分段等待执行完成状况,循环屏障CyclicBarrier | Java工具类

    目录 前言 Maven依赖 代码 总结 前言 工作中是否有这样的场景,多个线程任务,如果所有线程完成到某个阶段,你希望知道所有线程均完成该阶段.当然你使用线程计数可以实现,只是不够优雅. 所以我即:j ...

最新文章

  1. Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
  2. 2013应届毕业生“京北方”校招应聘总结
  3. C语言标准数学函数库math.h之常用函数介绍
  4. redis set数据类型常用命令及应用场景
  5. js 实现 点击图片刷新 验证码 看不清 换一张
  6. C语言学习之分别用while、for 编写程序,计算1+2+3+......+100的值
  7. debian/ubuntu19.10下安装使用护眼软件f.lux
  8. unity 飞机 残骸模型_训练残骸模式– Java 8中的改进实现
  9. Apache Cassandra和Apache Ignite:分布式数据库的明智之选
  10. mac上的Android虚拟机,android虚拟机能在retina MacBook pro上跑吗?
  11. Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)(转载)
  12. 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN
  13. C++ 返回类型协变
  14. centos6 安装glibc-2.14.1
  15. Input Director使用一个键盘和鼠标即可控制多台Windows计算机
  16. 智能算法-模拟退火-粒子群-鱼群算法
  17. 如何让bootbox弹框垂直居中
  18. Updating HP ESXi Hosts with VUM
  19. Electron 安装报错 'Electron failed to install correctly'
  20. Spark CASE WHEN 写法案例

热门文章

  1. Appcan、apicloud、HBuilder 不同之处解析
  2. AC日记——向量点积计算 openjudge 1.6 09
  3. FreeCAD项目编译记录(1)
  4. 那些不能遗忘的知识点回顾——操作系统系列(笔试面试高频题)
  5. vue2+vuex+vue-router 快速入门(三) vue 实例介绍
  6. mac下宿主机与virtualbox中的Ubuntu建立ssh连接
  7. 如何使用AdminStudio软件把.exe转换成.msi
  8. unity, StartCoroutine and StopCoroutine
  9. 游戏服务器数据库踩过的坑
  10. 禁用vsftpd欢迎语