黑马程序员技术交流社区

标题: 【广州校区】+【原创】+ 并发编程之CyclicBarrier [打印本页]

作者: jianhong    时间: 2019-1-15 15:24
标题: 【广州校区】+【原创】+ 并发编程之CyclicBarrier
一,有这样一个需求,旅游团,旅行出发前必须等待人都到齐了才出发,我们可以使用CyclicBarrier来实现二,CyclicBarrier提供了await()方法实现所有线程的阻塞,等所有线程都进来后才执行await()方法后的代码,代码如下:
public class CyclicBarrierTest {
    public static void main(String[] args) {
        //阻塞线程
        CyclicBarrier cb = new CyclicBarrier(5);
        ExecutorService service = Executors.newCachedThreadPool();
        for (int i=1;i<=5;i++){
            final int u = i;
            Runnable r = new Runnable() {
                @Override
                public void run() {
                    try {
                        Thread.sleep((long) (Math.random()*1000));
                        System.out.println(u+"到达集合地点,"+"当前有"+(cb.getNumberWaiting()+1)+"个人在等待");
                        cb.await();//阻塞点
                        System.out.println("人到齐了可以出发去旅游了");
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
            };
            service.execute(r);
        }
        service.shutdown();
   }
}


三,执行完后控制台将输出
4到达集合地点,当前有1个人在等待
1到达集合地点,当前有2个人在等待
2到达集合地点,当前有3个人在等待
3到达集合地点,当前有4个人在等待
5到达集合地点,当前有5个人在等待

人到齐了可以出发去旅游了
人到齐了可以出发去旅游了
人到齐了可以出发去旅游了
人到齐了可以出发去旅游了
人到齐了可以出发去旅游了










欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2