CountDownLatch 和 CyclicBarrier的特点以及区别

本文对比了Java多线程中CountDownLatch与CyclicBarrier的使用。CountDownLatch使用.countDown()方法递减计数,不可重置;CyclicBarrier使用.await()方法递减计数,可重置并支持多次到达屏障。CountDownLatch适用于主线程等待其他线程,而CyclicBarrier用于多个子线程相互等待。

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

 

几个月之前分别对这两个知识点源码做过一些总结,请参照如下地址

虽说之前有一笔带过两个的区别但是这次随着对技术的理解,再做一次二者的总结

相同点

他们都用作计数器的功能。
都是应用于多线程中组团执行任务的模式,以屏障作为线程集结点

不同点

计数方式CountDownLatch

使用.countDown()方法,计数器依次递减

CyclicBarrier使用.await()方法,count数依次递减,count初始值等于构造器的parties值
计数值重置CountDownLatch不重置:意味着屏障只能使用一次
CyclicBarrier重置:可以拥有多次到达屏障的机会,调用reset()方法即可重置
线程阻塞CountDownLatch

阻塞调用await()的线程,也就是所谓的主线程等待另一个或多个线程完成某事

CyclicBarrier阻塞调用await()的线程,也就是多个子线程互相等待,当所有子线程都完成时一起继续下一个事情
查看计数CountDownLatchgetCount()方法:获取当前计数值,也就是还剩多少个线程名额未执行
CyclicBarrier

gerParties()方法:屏障对象数,初始化屏障对象数

getNumberWaiting()方法:在屏障处等待的线程个数

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值