关闭

cyclicBarrier同步工具类

标签: 工具exceptionservicestringclass活动
516人阅读 评论(0) 收藏 举报
分类:
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();
 }
}


 

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:99291次
    • 积分:1692
    • 等级:
    • 排名:千里之外
    • 原创:56篇
    • 转载:58篇
    • 译文:1篇
    • 评论:17条
    最新评论