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

Java 线程并发 常用辅助类 (二) Cyclicbarrier,第1张

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

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

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

构造方法:

构造方法 Constructor and DescriptionCyclicBarrier(int parties)

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

CyclicBarrier(int parties, Runnable barrierAction)

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

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

Modifier and TypeMethod and Descriptionintawait()

等待所有 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 辅助类

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5481663.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-12
下一篇 2022-12-12

发表评论

登录后才能评论

评论列表(0条)

保存