CyclicBarrier实现线程路障效果

package com.thread_test;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * Created by zhen on 2017-06-06.
 */
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();
        }
    }

 

posted @ 2017-06-06 23:20  guodaxia  阅读(105)  评论(0)    收藏  举报