并发包-CyclicBarrier

本文深入讲解了CyclicBarrier在多线程程序中的应用,通过实例演示了如何利用CyclicBarrier让一组线程在达到共同屏障点后同步继续执行,特别适用于固定大小线程组的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

等待多个线程到达之后执行,可以循环使用

它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。

通俗点讲就是:让一组线程到达一个屏障时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续干活。

 

private static CyclicBarrier barrier;

    static class CyclicTest extends Thread{
        @Override
        public void run(){
            System.out.println(Thread.currentThread().getName() + "已经到了");
            try {
                barrier.await();
            } catch (InterruptedException e) {
                e.printStackTrace();
            } catch (BrokenBarrierException e) {
                e.printStackTrace();
            }
        }
    }

    public static void main(String[] args) {
        barrier = new CyclicBarrier(5,new Runnable() {
            @Override
            public void run() {
                System.out.println("我们准备出发吧");
            }
        });
        for(int i=0;i<20; i++){
            new CyclicTest().start();
        }

 

Thread-0已经到了
Thread-2已经到了
Thread-1已经到了
Thread-3已经到了
Thread-5已经到了
我们准备出发吧
Thread-4已经到了
Thread-8已经到了
Thread-9已经到了
Thread-7已经到了
Thread-11已经到了
我们准备出发吧
Thread-6已经到了
Thread-10已经到了
Thread-12已经到了
Thread-13已经到了
Thread-14已经到了
我们准备出发吧
Thread-19已经到了
Thread-16已经到了
Thread-15已经到了
Thread-17已经到了
Thread-18已经到了
我们准备出发吧

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值