美文网首页better
并发工具-CyclicBarrier

并发工具-CyclicBarrier

作者: zhengxc | 来源:发表于2018-09-18 16:36 被阅读0次

概述

CyclicBarrier:栅栏的概念,多线程的进行阻塞,等待某一个临界值条件满足后,同时执行!

场景:每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待!

    public static void main(String[] args) throws BrokenBarrierException, InterruptedException {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(4);
        ExecutorService executorService = Executors.newFixedThreadPool(4);
        for (int i = 0; i < 4; i++) {
            int finalI = i;
            executorService.execute(() -> {
                try {
                    Thread.sleep(1000 * (new Random()).nextInt(5));
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
                System.err.println("运动员" + finalI + "准备就绪");
                try {
                    cyclicBarrier.await(); //每个线程都调用await()后,所有线程开始执行
                    System.err.println("运动员" + finalI + "开始跑");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }

            });
        }
        executorService.shutdown();
    }
运行结果:

相关文章

网友评论

    本文标题:并发工具-CyclicBarrier

    本文链接:https://www.haomeiwen.com/subject/gpvpnftx.html