CyclicBarrier - jdk1.5并发包
来源:互联网 发布:java 集合有哪些 编辑:程序博客网 时间:2024/05/18 08:24
什么是CyclicBarrier
CyclicBarrier是JDK 5中java.util.Concurrent包中提出的同步类。CyclicBarrier可以用来等待子任务都完成后执行最后的任务。所有的线程等待其它线程到达Barrier。CyclicBarrier初始化时指定需要等待的线程数,通过调用CyclicBarrier.await()方法,所有线程阻塞等待直到都调用了await()方法。
Java中CyclicBarrier使用例子
import java.util.concurrent.CyclicBarrier;public class CyclicBarrierTest{private static class Task implements Runnable{private CyclicBarrier barrier;public Task(CyclicBarrier barrier){this.barrier = barrier;}@Overridepublic void run(){try { System.out.println(Thread.currentThread().getName() + " is waiting on barrier"); barrier.await(); System.out.println(Thread.currentThread().getName() + " has crossed the barrier"); } catch (Exception ex){ } }}public static void main(String[] args) {// creating CyclicBarrier with 3 parties i.e. 3 Threads needs to call await()final CyclicBarrier cb = new CyclicBarrier(3, new Runnable(){public void run(){// This task will be executed once all thread reaches barrierSystem.out.println("All parties are arrived at barrier, lets play");}});//starting each of threadThread t1 = new Thread(new Task(cb), "Thread 1");Thread t2 = new Thread(new Task(cb), "Thread 2");Thread t3 = new Thread(new Task(cb), "Thread 3");t1.start();t2.start();t3.start();}}
output:
Thread 1 is waiting on barrier
Thread 3 is waiting on barrier
Thread 2 is waiting on barrier
All parties are arrived at barrier, lets play
Thread 2 has crossed the barrier
Thread 3 has crossed the barrier
Thread 1 has crossed the barrier
什么时候使用CyclicBarrier
考虑到CyclicBarrier的特性可以用来实现mapreduce任务,例如多玩家游戏等待所有玩家都加入后才开始游戏。
CyclicBarrier重要知识点
1.CyclicBarrier可以用于所有线程到达barrier后执行任务
2.如果CyclicBarrier初始化了3个线程,这3个线程需要调用await()方法来消除barrier
3.线程将会阻塞在await()方法直到所有线程到达barrier
参考:
1.http://javarevisited.blogspot.hk/2012/07/cyclicbarrier-example-java-5-concurrency-tutorial.html
2.http://www.cnblogs.com/skywang12345/p/3533995.html
- CyclicBarrier - jdk1.5并发包
- Semaphore - jdk1.5并发包
- CountDownLatch - jdk1.5并发包
- Java并发包之CyclicBarrier
- JDK1.5并发包学习笔记
- Java并发包:CountDownLatch和CyclicBarrier
- JDK并发包---(10)循环栅栏:CyclicBarrier
- 【Java8源码分析】并发包-CyclicBarrier
- java-jdk1.5新增的并发包内容
- [Java并发包学习五]CountDownLatch和CyclicBarrier介绍
- [Java并发包学习五]CountDownLatch和CyclicBarrier介绍
- [Java并发包学习五]CountDownLatch和CyclicBarrier介绍
- Java线程总结(十一):并发包------CyclicBarrier
- [Java并发包学习五]CountDownLatch和CyclicBarrier介绍
- [Java并发包学习五]CountDownLatch和CyclicBarrier介绍
- [Java并发包学习五]CountDownLatch和CyclicBarrier介绍
- Java并发包中CyclicBarrier的工作原理、使用示例
- jdk1.8 J.U.C并发源码阅读------CyclicBarrier源码解析
- live555MediaServer几个构造过程详解
- 在Debian Linux上开启MineCraft(MC)服务器的一点经验
- c++类成员函数指针
- 第39天: UDF函数 user defined function
- 小马哥-----高仿红米note刷机 主板m8207 各个日期机型主板图 分移动版与联通版区别,而且要对应主板日期版本
- CyclicBarrier - jdk1.5并发包
- SDNU1061.采药3【二维费用背包】
- 任务定义器——SocketProcessor
- Android Volley完全解析(二),使用Volley加载网络图片
- java基础<四>
- linux 中真正的后台进程
- Sicily 2011 Nine Digits
- 三层总结
- 九度OJ题目1054:字符串内排序