并发工具之CyclicBarrier

CyclicBarrier是Java并发工具类,用于让一组线程等待彼此到达屏障点后一起继续执行。它基于Condition实现,内部包含计数器,线程调用await()方法后会被阻塞,当计数器减至0时唤醒所有线程。CyclicBarrier可以看作是加法操作,而CountDownLatch则是减法操作。
摘要由CSDN通过智能技术生成

1.使用场景
现实生活中我们经常会遇到这样的情景,在进行某个活动前需要等待人全部都齐了才开始。
例如:吃饭时要等全家人都上座了才动筷子,旅游时要等全部人都到齐了才出发,比赛时要等运动员都上场后才开始。
在JUC包中为我们提供了一个同步工具类能够很好的模拟这类场景,它就是CyclicBarrier类。
利用CyclicBarrier类可以实现一组线程相互等待,当所有线程都到达某个屏障点后再进行后续的操作。

2.实现原理
CyclicBarrier 的源码实现和 CountDownLatch 非常相似;
CountDownLatch 基于 AQS 的共享模式的使用,而 CyclicBarrier 基于 Condition 来实现的。
在CyclicBarrier类的内部有一个计数器,每个线程在到达屏障点的时候都会调用await方法将自己阻塞,此时计数器会减1,当计数器减为0的时候所有因调用await方法而被阻塞的线程将被唤醒。

3.CyclicBarrier的成员变量

private static class Generation {
    boolean broken = false;
}

/** The lock for guarding barrier entry */
private final ReentrantLock lock = new ReentrantLock();// 同步操作锁
/** Condition to wait on until tripped */
private final Condition trip = lock.newCondition();// 线程拦截器
/** The number of parties */
private final int parti
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值