CyclicBarrier测试
2015-11-22 20:54
441 查看
跑步者:
测试类为:
输出的结果为:
顺便说一下CountDownLatch 与CyclicBarrier 的区别:
CountDownLatch : 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。
CyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。
这样应该就清楚一点了,对于CountDownLatch来说,重点是那个“一个线程”, 是它在等待, 而另外那N的线程在把“某个事情”做完之后可以继续等待,可以终止。而对于CyclicBarrier来说,重点是那N个线程,他们之间任何一个没有完成,所有的线程都必须等待。
package com.yao.cyclic_barrier; import java.util.Random; import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; /** * Created by Kangjun on 2015/11/22. */ public class Runner implements Runnable { public Runner(String name, CyclicBarrier cyclicBarrier) { this.name = name; this.cyclicBarrier = cyclicBarrier; } private String name; private CyclicBarrier cyclicBarrier; @Override public void run() { System.out.println(name + ",准备好了..."); Random random = new Random(); try { Thread.sleep(1000 * random.nextInt(10)); cyclicBarrier.await(); } catch (InterruptedException e) { e.printStackTrace(); } catch (BrokenBarrierException e) { e.printStackTrace(); } System.out.println(name + ",起跑!"); } }
测试类为:
package com.yao.cyclic_barrier; import java.util.concurrent.CyclicBarrier; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; /** * Created by Kangjun on 2015/11/22. * 1、类说明: 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。 在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。 因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。 2、使用场景: 需要所有的子任务都完成时,才执行主任务,这个时候就可以选择使用CyclicBarrier。 */ public class Demo { public static void main(String[] args) { CyclicBarrier cyclicBarrier = new CyclicBarrier(5); ExecutorService exe = Executors.newFixedThreadPool(5); for (int i = 0; i < 5; i++) { exe.submit(new Runner("选手"+i,cyclicBarrier)); } exe.shutdown(); } }
输出的结果为:
选手0,准备好了... 选手1,准备好了... 选手2,准备好了... 选手4,准备好了... 选手3,准备好了... 选手2,起跑! 选手4,起跑! 选手0,起跑! 选手1,起跑! 选手3,起跑!
顺便说一下CountDownLatch 与CyclicBarrier 的区别:
CountDownLatch : 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行。
CyclicBarrier : N个线程相互等待,任何一个线程完成之前,所有的线程都必须等待。
这样应该就清楚一点了,对于CountDownLatch来说,重点是那个“一个线程”, 是它在等待, 而另外那N的线程在把“某个事情”做完之后可以继续等待,可以终止。而对于CyclicBarrier来说,重点是那N个线程,他们之间任何一个没有完成,所有的线程都必须等待。
相关文章推荐
- Java并发编程之栅栏(CyclicBarrier)实例介绍
- Java中CyclicBarrier的用法分析
- CountDownLatch和CyclicBarrier的区别
- 【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)
- Java CyclicBarrier
- Java多线程(八)之Semaphore、CountDownLatch、CyclicBarrier、Exchanger
- 多线程001 - 主线程等待子线程结束
- 多线程003 - 再谈CyclicBarrier
- 线程状态控制 CountDownLatch和CyclicBarrier的区别
- java线程中CyclicBarrier的使用—实现一组线程“集齐”后,再进行其他操作
- 【Java并发编程】之二十二:并发新特性—障碍器CyclicBarrier(含代码)
- 黑马程序员-Condition条件对象、Semaphore、CyclicBarrier、倒计时门栓 CountDownLatch、Exchanger(实现两个线程之间数据交换
- Java笔记:CountDownLatch - 计数锁存器、Future、CyclicBarrier - 循环屏障 和 Semaphore - 信号量
- 线程并发工具--CyclicBarrier
- 《黑马程序员》 CyclicBarrier的使用练习
- java 并发工具类CyclicBarrier介绍
- Executors+CyclicBarrier实现的并发测试小例子
- CyclicBarrier处理控制多线程顺序
- current包下CyclicBarrier的使用