美文网首页
主要并发工具类-CyclicBarrier的使用

主要并发工具类-CyclicBarrier的使用

作者: 飞奔吧牛牛 | 来源:发表于2020-02-10 05:42 被阅读0次

CyclicBarrier 从字面上理解为循环栅栏。起到的就是屏障的作用,阻止线程通过,而循环则是指其可以反复使用。和CountDownLatch不同的是,CountDownLatch的await方法在主线程中使用,阻塞的是主线程,当各个子线程执行完后,再执行主线程。CyclicBarrier的await方法在各个子线程中使用,阻塞的是各个子线程,当所有线程都到await方法处时,各个子线程再一起执行。

CyclicBarrier cyclicBarrier = new CyclicBarrier(4, () ->
                System.out.println("已经满4个线程,可以一起执行了!")
        );

        IntStream.range(1, 11).forEach(number -> {
            try {
                Thread.currentThread().sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            new Thread(() -> {
                try {
                    System.out.println(Thread.currentThread().getName() + "到了");
                    cyclicBarrier.await();
                    System.out.println(Thread.currentThread().getName() + "继续执行");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }, "线程->" + number).start();

        });

结果:

线程->1到了
线程->2到了
线程->3到了
线程->4到了
已经满4个线程,可以一起执行了!
线程->1继续执行
线程->2继续执行
线程->4继续执行
线程->3继续执行
线程->5到了
线程->6到了
线程->7到了
线程->8到了
已经满4个线程,可以一起执行了!
线程->5继续执行
线程->6继续执行
线程->8继续执行
线程->7继续执行
线程->9到了
线程->10到了

相关文章

网友评论

      本文标题:主要并发工具类-CyclicBarrier的使用

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