Java 线程并发 常用辅助类 (二) Cyclicbarrier

wuchangjian2021-11-13 15:37:03编程学习

定义介绍:允许一组线程全部等待彼此达到共同屏障点的同步辅助。循环阻塞在涉及固定大小的线程方的程序中很有用,这些线程必须偶尔等待彼此。屏障被称为循环 ,因为它可以在等待的线程被释放之后重新使用。

CyclicBarrier支持一个可选的Runnable命令,每个屏障点运行一次,在派对中的最后一个线程到达之后,但在任何线程释放之前。 在任何一方继续进行之前,此屏障操作对更新共享状态很有用。

构造方法:

构造方法
Constructor and Description
CyclicBarrier(int parties)

创建一个新的 CyclicBarrier ,当给定数量的线程(线程)等待它时,它将跳闸,并且当屏障跳闸时不执行预定义的动作。

CyclicBarrier(int parties, Runnable barrierAction)

创建一个新的 CyclicBarrier ,当给定数量的线程(线程)等待时,它将跳闸,当屏障跳闸时执行给定的屏障动作,由最后一个进入屏障的线程执行。

所有方法接口方法具体的方法

Modifier and TypeMethod and Description
intawait()

等待所有 parties已经在这个障碍上调用了 await 。

intawait(long timeout, TimeUnit unit)

等待所有 parties已经在此屏障上调用 await ,或指定的等待时间过去。

intgetNumberWaiting()

返回目前正在等待障碍的各方的数量。

intgetParties()

返回旅行这个障碍所需的聚会数量。

booleanisBroken()

查询这个障碍是否处于破碎状态。

voidreset()

将屏障重置为初始状态。

代码示例:

 @Test
    public void test01(){
        CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{
            System.out.println("召集龙珠"); //等到cyclicBarrier 七次时候执行


        });

        for(int i=1;i<8;i++) {
            final int tmp=i;
            new Thread(() -> {
                System.out.println("第"+tmp+"颗龙珠");


                try {
                    TimeUnit.SECONDS.sleep(2);
                    cyclicBarrier.await();


                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            }).start();
        }
        System.out.println("等待的数量1:"+cyclicBarrier.getNumberWaiting());

        System.out.println("状态1:"+  cyclicBarrier.isBroken());
       
    }

CyclicBarrier 与 CountDownLatch 区别 很明显 ,一个是倒减 ,倒减完后可以再往下执行,另一个是阻塞,阻塞到一定限制再一起执行,另外CyclicBarrier 可以重置,而CountDownLatch 不可以。

接下来:Semaphore 辅助类

相关文章

jQuery基础 学习笔记

目录 jQuery优点 jQuery下载 jQuery引入:...

想问下大家这个积分怎么获取

有没有哪位铁子和我说一下积分怎么获取的...

【C语言】字符串函数内存函数 十大函数超详讲解(详细讲解+代码演示+模拟实现)

【C语言】字符串函数内存函数 十大函数超详讲解(详细讲解+代码演示+模拟实现)

这篇文章主要介绍一些常用的字符串函数和内存操作函数,如果哪里写的有问题...

numpy中的一维数组的理解

一维数组的shape[1],或者axis=1,为啥报错?...

发表评论    

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。