Java多线程同步屏障计算_Java多线程之CountDownLatch和CyclicBarrier同步屏障的使用
一:CountDownLatch
CountDownLatch是一个执行 完成任务线程数 的 倒数计数器。我们考虑这种情况:士兵晨练,必须全队士兵集合完毕才开始跑步。用程序描述就:在晨练线程中,逐个启动士兵的集合线程,执行集合动作;等所有士兵的集合线程都执行完毕,才能继续晨练线程执行跑步操作。那么我们怎么快速地统计已经集合的士兵线程数,以及怎样在集合完毕后第一时间启动跑步呢?这里就需要用到CountDownLatch。
1:首先,我们在晨练线程中创建一个CountDownLatch:static final CountDownLatch countDownLatch = new CountDownLatch(10);//构造参数说明有多少个需要完成的线程
2:在每个士兵的集合线程中,通过:countDownLatch.countDown(); //说明当前线程已经执行到屏障处,把倒数计数器值减1
3:在晨练线程中,通过:countDownLatch.await(); //暂时挂起线程,等待倒数计数器为0时自动唤醒,继续执行
二:CyclicBarrier
与countDownLatch相反,这是一个加法计数器的同步屏障,并且可以重复使用。它在每个线程中设置屏障点,当一个线程执行到屏障点时就需要停下,计数器+1,直到计数器达到创建时指定值时执行相应的响应线程,并且全部线程继续执行,直到下一个屏障处等待或者执行完毕。
1:创建CyclicBarrier同步屏障对象,设置屏障处计数值以及达到该值后执行什么响应动作线程:
CyclicBarrier barrier = new CyclicBarrier(n, new BarrierDone_Run());
2:在BarrierDone_Run线程中,定义 执行到屏障处而停顿的线程数达到设定值 时,启动响应线程执行后续操作。
3:逐个启动工作线程,在工作线程的run()方法中,通过: barrier.await(); //设定屏障,当线程执行到这步时挂起,直到计数器达到设定值时才继续执行
三:比较
1:CountDownLatch是把主干线程挂起,在任务线程中进行倒数计数,直到任务线程执行完才唤醒主干线程继续执行;
CyclicBarrier是把任务线程挂起,直到所有任务线程执行到屏障处再放行继续执行;
2:CountDownLatch达到屏障放行标准后放行的是主干线程;
CyclicBarrier达到屏障放行标准后放行的是任务线程,并且还会额外地触发一个达到标准后执行的响应线程;
Java多线程同步屏障计算_Java多线程之CountDownLatch和CyclicBarrier同步屏障的使用相关推荐
- 多线程之CountDownLatch和CyclicBarrier的区别和用法
一.CountDownLatch的使用 CountDownLatch经常用于监听某些初始化操作,等初始化执行完毕后,再通知主线程继续工作. CountDownLatch定义: 一个同步辅助类,在完成一 ...
- Java多线程之CountDownLatch用法
Java多线程之CountDownLatch用法 本文目录: CountDownLatch基本概念 CountDownLatch案例:6个同学陆续离开教室后班长才可以关门 CountDownLatch ...
- java 多线程的基本概念_java基本教程之多线程基本概念 java多线程教程
多线程是Java中不可避免的一个重要主体.下面我们将展开对多线程的学习.接下来的内容,是对"JDK中新增JUC包"之前的Java多线程内容的讲解,涉及到的内容包括,Object类中 ...
- java 多线程和并行编程_Java 8中的并行和异步编程
java 多线程和并行编程 并行代码是在多个线程上运行的代码,曾经是许多经验丰富的开发人员的噩梦,但是Java 8带来了许多更改,这些更改应该使这种提高性能的窍门更加易于管理. 并行流 在Java 8 ...
- java多线程的实现方式_JAVA多线程实现的三种方式
最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用E ...
- java 买票_java 多线程之synchronized wait/notify解决买票问题
一.Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的st ...
- java多线程下载源码_Java多线程文件分片下载实现的示例代码
多线程下载介绍 多线程下载技术是很常见的一种下载方案,这种方式充分利用了多线程的优势,在同一时间段内通过多个线程发起下载请求,将需要下载的数据分割成多个部分,每一个线程只负责下载其中一个部分,然后将下 ...
- java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程
[第一章]Java多线程编程 一.进程与线程 多个时间段会有多个程序依次执行,但是同一时间点只有一个进程执行 线程是在进程基础之上划分的更小的程序单元 ,线程是在进程基础上创建并且使用的,所以线程依赖 ...
- java 多线程两种方式_JAVA多线程实现的两种方式
java多线程实现方式主要有两种:继承Thread类.实现Runnable接口 1.继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了 ...
最新文章
- 某大厂程序员吐槽:在北京当码农,不敢结婚不敢生娃,真是注孤生!
- @所有城市:想建AI智算中心的看这里!国家认可的那种
- php的__FILE__常量和dirname()
- Leetcode1684. 统计一致字符串的数目[C++题解]:字符串O(n^2)简单题
- 招商银行、To B智能投顾讲述:金融机构的人工智能实践 | CCF-GAIR 2017
- 一个有钱人儿子写的作文!
- 阶乘和(信息学奥赛一本通-T1173)
- 再看lambda/sorted/filter/map
- angularjs $state.go页面不刷新数据
- 项目部署到服务器后字符编码,将UTF-8编码的数据发布到服务器会丢失某些字符...
- C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10
- Javaweb常用单词
- Android手势密码解锁
- 雷霆战机服务器维护公告,雷霆战机停服公告 4月11日服务器维护
- matlab处理采集的声音数据
- 天蝎项目整机柜服务器技术规范v1.01,天蝎项目整机柜服务器技术规范v1.01.pdf
- 开山斧 V0.3 WIN 版本
- TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题
- js 字符串转gbk 数组
- 分析方法4---多维度拆解分析