cyclicBarrier同步工具类

原创 2012年03月25日 21:32:46
public class CyclicBarrierTest {
// CyclicBarrier同步工具类
// 表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面,
// 这就好比整个公司的人员利用周末时间集体郊游一样,先各自从家出发到公司集合后,
// 再同时出发到公园游玩,在指定地点集合后再同时开始就餐,…
 public static void main(String[] args) {
  ExecutorService service = Executors.newCachedThreadPool();
  final  CyclicBarrier cb = new CyclicBarrier(3);
  for(int i=0;i<3;i++){
   Runnable runnable = new Runnable(){
     public void run(){
     try {
      Thread.sleep((long)(Math.random()*10000)); 
      System.out.println("线程" + Thread.currentThread().getName() + 
        "即将到达集合地点1,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));      
      cb.await();
      
      Thread.sleep((long)(Math.random()*10000)); 
      System.out.println("线程" + Thread.currentThread().getName() + 
        "即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));
      cb.await(); 
      Thread.sleep((long)(Math.random()*10000)); 
      System.out.println("线程" + Thread.currentThread().getName() + 
        "即将到达集合地点3,当前已有" + (cb.getNumberWaiting() + 1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));      
      cb.await();      
     } catch (Exception e) {
      e.printStackTrace();
     }    
    }
   };
   service.execute(runnable);
  }
  service.shutdown();
 }
}


 

相关文章推荐

线程同步工具类——CyclicBarrier

CyclicBarrier一个同步辅助类。 它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等...

同步工具类之 CyclicBarrier

CyclicBarrier 是一个线程同步工具类,它使一系列线程彼此等待,直到所有线程都到达栅栏点后,再开始下一步操作。栅栏点通过reset()可以被重新初始化,所以栅栏可以被重复利用。 Cyclic...

线程同步工具类,CyclicBarrier学习

线程同步工具类,CyclicBarrier日常开发较少涉及,这里只举一个例子,以做备注.N个人一块出去玩,相约去两个地方,CyclicBarrier的主要作用是等待所有人都汇合了,才往下一站出发. ...
  • lwj0310
  • lwj0310
  • 2014年04月25日 11:02
  • 296

JAVA中的并发工具类(二)---同步屏障类CyclicBarrier

本文涉及到的源码可以在我的github找到。CyclicBarrier的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障点时均被阻塞,只要规定数目的...

Java同步工具类——栅栏[CyclicBarrier]

本文的概念来自《Java并发编程实战》我们前面已经介绍了通过闭锁来启动一组相关的操作,或者等待一组相关的操作结束。闭锁是一次性对象,一旦进入终止状态就不能被重置。栅栏(Barrier)类似于闭锁,它能...

【死磕Java并发】-----J.U.C之并发工具类:CyclicBarrier

此篇博客所有源码均来自JDK 1.8 CyclicBarrier,一个同步辅助类,在API中是这么介绍的:它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。...
  • chenssy
  • chenssy
  • 2017年04月13日 18:06
  • 5249

Java线程(CountDownLatch、CyclicBarrier、Semaphore)并发控制工具类

尽管线程是比较的神秘且具有一定的不可控性,但我们依然可以尽可能地对其进行管理和“控制” 运用CountDownLatch、CyclicBarrier、Semaphore等 在很大程度上可以帮我们对线程...
  • only06
  • only06
  • 2016年11月05日 19:06
  • 210

Java并发工具类CountDownLatch和CyclicBarrier

1.CountDownLatchCountDownLatch允许一个或多个线程等待其他线程完成操作,其构造函数接收一个int型的参数作为计数器,若想等待N个点完成,就传人N。此处的N个点,可指N个线程...

Concurrent常用工具类的使用(CyclicBarrier/CountDownLatch/Callable)

Concurrent.Util常用类CyclicBarrier假设有一个场景:每个线程代表一个运动员,当运动员都准备好才一起出发,只要有一个没准备好就大家都等待。public class UseCyc...

第8章 Java中的并发工具类(CountDownLatch CyclicBarrier Semaphore Exchanger)

1 等待多线程完成的CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作。 代码示例如下: 1 2 3 4 5 6 7 ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:cyclicBarrier同步工具类
举报原因:
原因补充:

(最多只允许输入30个字)