CountDownLatch和CyclicBarrier有什么区别?

CountDownLatch有时被称为“闭锁”,其作用相当于一扇门:在CountDownLatch达到结束状态之前,这扇门一直是关闭的,并且没有任何线程能通过,当到达结束状态时,这扇门会打开并允许所有的线程通过。当CountDownLatch到达结束状态后,将不会再改变状态,因此这扇门将永远保持打开状态。CountDownLatch可以用来确保某些活动直到其它活动都完成后才继续执行。

CyclicBarrier有时被称为“栅栏”,其作用与CountDownLatch类似,它能阻塞一组线程直到某个事件发生。CyclicBarrier与CountDownLatch的关键区别在于,所有线程必须同时到达栅栏位置,才能继续执行。CountDownLatch用于等待事件,而CyclicBarrier用于等待其它线程。

总结起来两者区别如下:

  • CountDownLatch是不可重置的,所以无法重用;而CyclicBarrier则没有这种限制,可以重用。
  • CountDownLatch的基本操作组合是countDown/await调用await的线程阻塞等待countDown足够的次数不管你是在一个线程还是多个线程里countDown,只要次数足够即可。所以说CountDownLatch操作的是事件
  • CyclicBarrier的基本操作组合,则就是await。当所有的伙伴(parties)都调用了await,才会继续进行任务,并自动进行重置。注意,正常情况下,CyclicBarrier的重置都是自动发生的,如果我们调用reset方法,但还有线程在等待,就会导致等待线程被打扰,抛出BrokenBarrierException异常。CyclicBarrier侧重点是线程,而不是调用事件,它的典型应用场景是用来等待并发线程结束。

 

摘取自:https://blog.csdn.net/qweqwruio/article/details/81359780

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值