JavaSE-多线程(7)- CyclicBarrier

JavaSE-多线程(7)- CyclicBarrier

CyclicBarrier 直译为循环的关卡,

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class CyclicBarrierTest implements Runnable {

    private CyclicBarrier cyclicBarrier;

    CyclicBarrierTest(CyclicBarrier cyclicBarrier) {
        this.cyclicBarrier = cyclicBarrier;
    }

    @Override
    public void run() {
        System.out.println(Thread.currentThread().getName() + " begin");
        try {
            // 线程进入就开始等待,直到等待数量达到允许线程继续往下执行的数量,这里是2,每次允许两个线程执行下面的操作
            cyclicBarrier.await();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (BrokenBarrierException e) {
            e.printStackTrace();
        }
        System.out.println(Thread.currentThread().getName() + " end");
    }

    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(2, () -> {
            System.out.println("等待的线程数量达到目标数量,开始继续执行");
        });

        CyclicBarrierTest cyclicBarrierTest = new CyclicBarrierTest(cyclicBarrier);
        for (int i = 0; i < 20; i++) {
            Thread t = new Thread(cyclicBarrierTest);
            t.setName("线程" + i);
            t.start();
        }
    }
}
线程0 begin
线程4 begin
线程3 begin
线程5 begin
等待的线程数量达到目标数量,开始继续执行
线程2 begin
等待的线程数量达到目标数量,开始继续执行
线程1 begin
线程2 end
线程6 begin
等待的线程数量达到目标数量,开始继续执行
线程6 end
线程9 begin
线程8 begin
等待的线程数量达到目标数量,开始继续执行
线程10 begin
线程12 begin
线程14 begin
线程3 end
线程7 begin
线程11 begin
线程15 begin
线程1 end
等待的线程数量达到目标数量,开始继续执行
线程18 begin
等待的线程数量达到目标数量,开始继续执行
线程13 begin
线程0 end
线程4 end
线程5 end
等待的线程数量达到目标数量,开始继续执行
线程9 end
等待的线程数量达到目标数量,开始继续执行
线程18 end
线程19 begin
线程12 end
线程17 begin
线程16 begin
等待的线程数量达到目标数量,开始继续执行
线程8 end
线程7 end
线程10 end
线程11 end
线程13 end
等待的线程数量达到目标数量,开始继续执行
线程14 end
线程19 end
线程17 end
线程15 end
线程16 end

当同时有多个线程执行时,CyclicBarrier 可以限制继续执行的线程个数,其它线程处于等待状态,当这些线程执行完后再执行下一批线程,起到限流的作用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值