java中CyclicBarrier的简单用法
2015-05-29 10:17
405 查看
CyclicBarrier 和 CountDownLatch 都可以用来让一组线程等待其它线程。与 CyclicBarrier 不同的是,CountdownLatch 不能重新使用。
CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。
CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。
CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
1 public class TestCyclicBarrier { 2 3 private static final int THREAD_NUM = 5; 4 5 public static class WorkerThread implements Runnable{ 6 7 CyclicBarrier barrier; 8 9 public WorkerThread(CyclicBarrier b){ 10 this.barrier = b; 11 } 12 13 @Override 14 public void run() { 15 // TODO Auto-generated method stub 16 try{ 17 System.out.println("Worker's waiting"); 18 //线程在这里等待,直到所有线程都到达barrier。 19 barrier.await(); 20 System.out.println("ID:"+Thread.currentThread().getId()+" Working"); 21 }catch(Exception e){ 22 e.printStackTrace(); 23 } 24 } 25 26 } 27 28 /** 29 * @param args 30 */ 31 public static void main(String[] args) { 32 // TODO Auto-generated method stub 33 CyclicBarrier cb = new CyclicBarrier(THREAD_NUM, new Runnable() { 34 //当所有线程到达barrier时执行 35 @Override 36 public void run() { 37 // TODO Auto-generated method stub 38 System.out.println("Inside Barrier"); 39 40 } 41 }); 42 43 for(int i=0;i<THREAD_NUM;i++){ 44 new Thread(new WorkerThread(cb)).start(); 45 } 46 } 47 48 } 49 /* 50 以下是输出: 51 Worker's waiting 52 Worker's waiting 53 Worker's waiting 54 Worker's waiting 55 Worker's waiting 56 Inside Barrier 57 ID:12 Working 58 ID:8 Working 59 ID:11 Working 60 ID:9 Working 61 ID:10 Working 62 */
CyclicBarrier初始化时规定一个数目,然后计算调用了CyclicBarrier.await()进入等待的线程数。当线程数达到了这个数目时,所有进入等待状态的线程被唤醒并继续。
CyclicBarrier就象它名字的意思一样,可看成是个障碍, 所有的线程必须到齐后才能一起通过这个障碍。
CyclicBarrier初始时还可带一个Runnable的参数, 此Runnable任务在CyclicBarrier的数目达到后,所有其它线程被唤醒前被执行。
相关文章推荐
- spring整合JMS(三)
- Solve the problem of "Java: illegal start of expression"
- spring整合JMS(二)
- spring整合JMS(一)
- 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)
- JAVA实现AES加密
- JOIN US框架-4(spring mvc 怎么用的1?)
- 最近开始研究PMD(一款采用BSD协议发布的Java程序代码检查工具)
- Eclipse中查看Android模拟器SD卡目录
- Eclipse字体修改设置
- Java编程思想之-主板设计
- win7 eclipse 字体设置
- 有jar包依然报java.lang.NoClassDefFoundError: javax/servlet/http/HttpServletRequest
- Struts2的结果集的详细介绍及说明案例分析
- shaded.org.eclipse.aether.resolution.ArtifactResolutionException解决方法
- JAVA水晶报表从环境搭建到创建动态水晶报表
- springMVC中文乱码问题
- Java编程思想之-主板示例
- Spring jar包详解
- spring freemarker集成