CyclicBarrier源码分析

本文深入解析CyclicBarrier的原理及应用,突出其可复用性和支持执行特定逻辑的特点,适用于多线程同步场景。

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

字面意思回环栅栏,通过它可以实现让一组线程等待至某个状态之后再全部同时执行。叫做回环是因为当所有等待线程都被释放以后,CyclicBarrier可以被重用。我们暂且把这个状态就叫做barrier,当调用await()方法之后,线程就处于barrier了。

其实它和countDownLatch很类似,也是个计数器。

但他有两个优点:

1.一个他的计数器能复用,而countDownLatch减到0就没了

2.他可以设置所以线程同时到位了,执行某个逻辑。通过入参设置runnable

 

构造参数主要就这个,里面就是保存下到达的阈值,以及之后的执行体。

 

下面看await方法,主要就是执行dowait方法

这里可以先明确,这个类主要就是靠ReetrantLock()和Condition来实现功能的。

先看前部分:

先是让调用这个方法的线程取获取锁,获取到后,前面的broken的判断,就是用来线程是不是被中断了,如果被中断了,那就停止挂起,全部唤醒。

然后每调用一次await,就把count减一,如果减到0,就选最后到达的线程进行执行这个run执行体。然后再调用nextGeneration方法把线程都唤醒。

看下半部分:

如果调用await的线程没有达到阈值,就调用conditon的挂起操作,如果有时间,就用有过期时间的挂起。如果中途被中断,同样唤醒其他线程。剩下的就是一些校验规则,就不细述了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值