A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

一,有这样一个需求,旅游团,旅行出发前必须等待人都到齐了才出发,我们可以使用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个人在等待

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





0 个回复

您需要登录后才可以回帖 登录 | 加入黑马