首页 > 编程 > Java > 正文

java多线程之CyclicBarrier的使用方法

2019-11-26 11:05:45
字体:
来源:转载
供稿:网友

java多线程之CyclicBarrier的使用方法

public class CyclicBarrierTest {    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();   } } 

运行结果如下:

线程pool-1-thread-3即将到达集合地点1,当前已有1个已经到达,正在等候线程pool-1-thread-1即将到达集合地点1,当前已有2个已经到达,正在等候线程pool-1-thread-2即将到达集合地点1,当前已有3个已经到达,都到齐了,继续走啊线程pool-1-thread-3即将到达集合地点2,当前已有1个已经到达,正在等候线程pool-1-thread-1即将到达集合地点2,当前已有2个已经到达,正在等候线程pool-1-thread-2即将到达集合地点2,当前已有3个已经到达,都到齐了,继续走啊线程pool-1-thread-1即将到达集合地点3,当前已有1个已经到达,正在等候线程pool-1-thread-3即将到达集合地点3,当前已有2个已经到达,正在等候线程pool-1-thread-2即将到达集合地点3,当前已有3个已经到达,都到齐了,继续走啊

如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表