Java线程总结(十一):并发包------CyclicBarrier

    xiaoxiao2022-06-22  25

     

    package com.ydj; import java.util.concurrent.CyclicBarrier;   import java.util.concurrent.ExecutorService;   import java.util.concurrent.Executors;      public class CyclicBarrierTest {       /**       * 表示大家彼此等待,大家集合好后才开始出发,分散活动后又在指定地点集合碰面。       *        * 这就好比整个公司的人员利用周末时间集体郊游一样:       * 先各自从家出发到公司集合后(没有集合则等待), 再同时出发到公园游玩,       * 在指定地点集合后(没有集合则等待)再同时开始就餐       */       public static void main(String[] args) {           ExecutorService service = Executors.newCachedThreadPool();           final  CyclicBarrier cb = new CyclicBarrier(3);//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();//如果3个线程没有全部到达,就等待                                                      Thread.sleep((long)(Math.random()*10000));                             System.out.println("线程" + Thread.currentThread().getName() +                                    "即将到达集合地点2,当前已有" + (cb.getNumberWaiting()+1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));                           cb.await(); //如果3个线程没有全部到达,就等待                           Thread.sleep((long)(Math.random()*10000));                             System.out.println("线程" + Thread.currentThread().getName() +                                    "即将到达集合地点3,当前已有" + (cb.getNumberWaiting() + 1) + "个已经到达," + (cb.getNumberWaiting()==2?"都到齐了,继续走啊":"正在等候"));                                                cb.await(); //如果3个线程没有全部到达,就等待                                         } catch (Exception e) {                           e.printStackTrace();                       }                                  }               };               service.execute(runnable);           }           service.shutdown();       }   }  

    运行结果:

    转载请注明原文地址: https://ju.6miu.com/read-1122806.html

    最新回复(0)