CyclicBarrier多线程
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多线程相关推荐
- 关卡CyclicBarrier的使用
2019独角兽企业重金招聘Python工程师标准>>> 有时线程之间需要同步.现有如下要求 多线程执行job的两个方法:所有doJob1()执行完之后,doJob2()才开始执行. ...
- 「冰河技术」部分精华文章分类汇总,P8架构师都在看的技术文章!!
这次,我将 [冰河技术] 微信公众号的文章整理出来了,很多细节的点,可能想得不是很完善,大家可以去[冰河技术]公众号获取或者在公众号内回复[冰河]加我[微信]提意见(别忘记点赞哟). 原创文章每周更新 ...
- java线程栅栏_Java 多线程基础 - CyclicBarrier
我的博客 转载请注明原创出处. 序 java.util.concurrent包里有几个能帮助人们管理相互合作的线程集的类,为多线程常见的应用场景预置了抽象好的类库.在遇到这些应用场景时应该直接重用合适 ...
- JUC 中的多线程协作工具类:CountDownLatch 和 CyclicBarrier
点击上方 好好学java ,选择 星标 公众号 重磅资讯.干货,第一时间送达 今日推荐:干掉 Navicat:这个 IDEA 的兄弟真香!个人原创100W+访问量博客:点击前往,查看更多 最近在学习 ...
- JAVA所有选手就位后比赛开始_Java多线程-CountDownLatch、CyclicBarrier、Semaphore
上次简单了解了多线程中锁的类型,今天要简单了解下多线程并发控制的一些工具类了. 1. 概念说明: CountDownLatch:相当于一个待执行线程计数器,当计数减为零时表示所有待执行线程都已执行完毕 ...
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
一.引言 Semaphore :一个计数信号量 CountDownLatch :一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线 ...
- 【多线程】CountDownLatch 和 CyclicBarrier:如何让多线程步调一致?
假设现在有一个对账系统,需要优化一下.它的基本业务是用户通过在线商城下单,然后生成电子订单,保存在订单库:之后物流会生成派送单给用户发货,派送单保存在派送单库.为了防止漏派送或重复派送,对账系统每天会 ...
- java线程栅栏_Java多线程并发系列之闭锁(Latch)和栅栏(CyclicBarrier)
今天项目上遇到一个多线程任务问题,大概图文描述一下: 1.前端需要及时返回任务状态 2.后台开了一个任务线程去执行具体的业务,业务包括四个部分,四个部分全部完成才算完成 3.业务中某些耗时的或者需要多 ...
- java 多线程分段等待执行完成状况,循环屏障CyclicBarrier | Java工具类
目录 前言 Maven依赖 代码 总结 前言 工作中是否有这样的场景,多个线程任务,如果所有线程完成到某个阶段,你希望知道所有线程均完成该阶段.当然你使用线程计数可以实现,只是不够优雅. 所以我即:j ...
最新文章
- Installation error: INSTALL_FAILED_VERSION_DOWNGRADE
- 2013应届毕业生“京北方”校招应聘总结
- C语言标准数学函数库math.h之常用函数介绍
- redis set数据类型常用命令及应用场景
- js 实现 点击图片刷新 验证码 看不清 换一张
- C语言学习之分别用while、for 编写程序,计算1+2+3+......+100的值
- debian/ubuntu19.10下安装使用护眼软件f.lux
- unity 飞机 残骸模型_训练残骸模式– Java 8中的改进实现
- Apache Cassandra和Apache Ignite:分布式数据库的明智之选
- mac上的Android虚拟机,android虚拟机能在retina MacBook pro上跑吗?
- Unix NetWork Programming——环境搭建(解决unp.h等源码编译问题)(转载)
- 花书+吴恩达深度学习(十五)序列模型之循环神经网络 RNN
- C++ 返回类型协变
- centos6 安装glibc-2.14.1
- Input Director使用一个键盘和鼠标即可控制多台Windows计算机
- 智能算法-模拟退火-粒子群-鱼群算法
- 如何让bootbox弹框垂直居中
- Updating HP ESXi Hosts with VUM
- Electron 安装报错 'Electron failed to install correctly'
- Spark CASE WHEN 写法案例
热门文章
- Appcan、apicloud、HBuilder 不同之处解析
- AC日记——向量点积计算 openjudge 1.6 09
- FreeCAD项目编译记录(1)
- 那些不能遗忘的知识点回顾——操作系统系列(笔试面试高频题)
- vue2+vuex+vue-router 快速入门(三) vue 实例介绍
- mac下宿主机与virtualbox中的Ubuntu建立ssh连接
- 如何使用AdminStudio软件把.exe转换成.msi
- unity, StartCoroutine and StopCoroutine
- 游戏服务器数据库踩过的坑
- 禁用vsftpd欢迎语