【Java多线程与并发库】14.java5的CountDownLatch同步工具
来源:互联网 发布:如何评价蛤 知乎 编辑:程序博客网 时间:2024/06/05 07:53
CountDownLatch
犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数器到达0时,
则所有等待着或单个等待着开始执行。
可以实现一个人(也可以是多个人)等待其它所有人来通知他,也可以实现一个人通知多个人的
效果,类似裁判一声口令,运动员同时开始奔跑,或者所有运动员都跑到终点后裁判才可以公
布结果,这个功能适合做类似百米赛跑的功能。
实例:
答案计数器,基础计数分别是1和3。countDown()方法使计数器的计数减一,所以一开始如
果主线程不执行countDown()方法的话,所有子线程都在等待,直到主线程执行countDown()
方法,然后主线程就在等待各个子线程的答案,3个子线程,每一个执行完任务之后都会把
cdAnswer的计数减一,直到三个线程都完成任务(都减一)的时候,cdAnswer计数才结束,
这时候主线程才可以继续执行。
结果:
转载请注明出处:http://blog.csdn.net/acmman/article/details/53004472
犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数器到达0时,
则所有等待着或单个等待着开始执行。
可以实现一个人(也可以是多个人)等待其它所有人来通知他,也可以实现一个人通知多个人的
效果,类似裁判一声口令,运动员同时开始奔跑,或者所有运动员都跑到终点后裁判才可以公
布结果,这个功能适合做类似百米赛跑的功能。
实例:
package cn.edu.hpu.test;import java.util.concurrent.CountDownLatch;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class CountdownLatchTest { public static void main(String[] args) { ExecutorService service= Executors.newCachedThreadPool(); final CountDownLatch cdOrder=new CountDownLatch(1); final CountDownLatch cdAnswer=new CountDownLatch(3); for (int i = 0; i < 3; i++) { //创建三个一样的线程任务 Runnable runnable=new Runnable(){ public void run() { try { System.out.println("线程:"+Thread.currentThread().getName()+ "正准备接受命令"); cdOrder.await(); System.out.println("线程:"+Thread.currentThread().getName()+ "已接受命令"); Thread.sleep((long)(Math.random()*10000)); System.out.println("线程:"+Thread.currentThread().getName()+ "回应命令处理结果"); cdAnswer.countDown(); } catch (InterruptedException e) { e.printStackTrace(); } } }; service.execute(runnable); } try { Thread.sleep((long)(Math.random()*10000)); System.out.println("线程:"+Thread.currentThread().getName()+ "即将发布命令"); cdOrder.countDown(); System.out.println("线程:"+Thread.currentThread().getName()+ "已发送命令,正在等待结果..."); cdAnswer.await(); System.out.println("线程:"+Thread.currentThread().getName()+ "已收到所有响应结果"); } catch (Exception e) { e.printStackTrace(); } service.shutdown(); }}首先利用Executors创建了一个缓存线程池(大小自适应),然后创建一个命令计数器和一个
答案计数器,基础计数分别是1和3。countDown()方法使计数器的计数减一,所以一开始如
果主线程不执行countDown()方法的话,所有子线程都在等待,直到主线程执行countDown()
方法,然后主线程就在等待各个子线程的答案,3个子线程,每一个执行完任务之后都会把
cdAnswer的计数减一,直到三个线程都完成任务(都减一)的时候,cdAnswer计数才结束,
这时候主线程才可以继续执行。
结果:
转载请注明出处:http://blog.csdn.net/acmman/article/details/53004472
1 0
- 【Java多线程与并发库】14.java5的CountDownLatch同步工具
- 【Java多线程与并发库】12.java5的Semaphere同步工具
- 【Java多线程与并发库】13.java5的CyclicBarrier同步工具
- 【Java多线程与并发库】15.java5的Exchanger同步工具
- Java5 多线程(六)--CountDownLatch 同步工具类
- java5 CountDownLatch同步工具
- 【Java多线程与并发库】17.java5同步集合类的应用
- java5的CountDownLatch同步工具(十六)
- (12)java5的CountDownLatch、Exchanger同步工具
- (12)java5的CountDownLatch、Exchanger同步工具
- 【Java多线程与并发库】8.java5线程并发库之线程池的应用
- 【Java多线程与并发库】8.java5线程并发库之线程池的应用
- java5 CountDownLatch线程同步工具类
- java多线程同步工具之CountDownlatch
- java多线程中线程同步工具-CountDownLatch
- 多线程同步工具-CountDownLatch
- Java并发和多线程4:使用通用同步工具CountDownLatch实现线程等待
- 【Java多线程与并发库】10.java5的线程锁(读写锁)技术
- ubuntu 16.04破解myeclipse215 stable 2.0
- response输出中文出现“??”的问题
- 深入浅出 妙用Javascript中apply、call、bind
- C#_为WinForm窗体定义功能快捷键
- 打造最简单ViewPager指示器,实现小圆点效果
- 【Java多线程与并发库】14.java5的CountDownLatch同步工具
- secureCRT 选中复制 变成 ^C
- Android configChanges属性总结
- Unity3D Anim Clip 向脚本发送事件
- 学习笔记之JavaSE(14)--面向对象编程5
- 数据挖掘有关或者有帮助的R包和函数的集合
- 我来告诉你,草根程序员如何进入 BAT
- SD卡压力测试脚本
- 多旋翼基本组成