CountDownLatch与CyclicBarrier

本文详细对比了CountDownLatch与CyclicBarrier两种并发控制工具的特点及使用场景。CountDownLatch用于设置一个屏障点,当所有线程到达该点后主线程才能继续执行;而CyclicBarrier则允许线程组多次等待,适用于需要经历多个阶段的并发任务。
CountDownLatch与CyclicBarrier被设计用来进行一组线程协作工作,完成一个或多个阶段的任务,二者有什么区别与联系呢?
[b][size=large]1、CountDownLatch[/size][/b]
这个用来设置一个屏障点,这个屏障点有好几把锁,每把锁都被开开之后,主线程才能继续往下面执行。
一个李子:3个人去骑行,约定到某个地方集合吃饭,全部到之后老板才上菜。


//3个人出发,每个人到店之后报告老板
CountDownLatch latch=new CountDownLatch(3);
go(latch);
//全部到店之前,老板一直等着,不上菜
latch.await();

//所有人都到了,老板上菜
serve();




go(CountDownLatch latch){
//第1个人出发,到了后通知老板
latch.countDown();
//第2个人出发,到了后通知老板
latch.countDown();
//第3个人出发,到了后通知老板
latch.countDown();
}


[b][size=large]2、CyclicBarrier[/size][/b]

CyclicBarrier与CountDownLatch类似,但是可以去完成好几个阶段的任务,比如上述李子,到店吃玩饭后继续出发,到下一个目的地,全部到了之后再吃饭。
此时CyclicBarrier可以完成循环等待。


//3个人出发,每个人到店之后报告老板
CyclicBarrier cb =new CyclicBarrier(3);
for(...){
//每个人出发
go(cb);
}



//一个人的行程
go(CyclicBarrier cb){
//到达地点1,等待其他人到齐
cb.await();
//都到了吃饭,然后再出发
eat then continue going;

//到达地点2,等待其他人到齐
cb.await();
//都到了吃饭
eat;
}



[size=large][b]总结:[/b][/size]
CountDownLatch与CyclicBarrier 都是使一组线程协同完成一项任务,而CyclicBarrier 可以循环进行,完成多个阶段的任务(当然也可以用在单个任务的处理),CountDownLatch用的比较多。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值