CountDownLatch和CyclicBarrier的区别、案例分析

1.CountDownLatch和CyclicBarrier的区别

(1)CountDownLatch的线程数不大于计数器,而CyclicBarrier的线程数与计数器相等。
(2)CountDownLatch的放行由其他线程来控制,而CyclicBarrier的放行由线程自己来控制。

2.CountDownLatch和CyclicBarrier的案例分析

通过一场考试来分析CountDownLatch和CyclicBarrier的第二个区别。案例如下:

一个班级有10个学生,他们要参加期末英语考试。
考试规则:
(1)10个考生全部到齐之后即可开始考试,
(2)考卷上一共有两个问答题,分别在两份试卷上,做完第一道题才能做第二道题。
(3)学生答完第一道题按红灯,答完第二道题按绿灯。
(4)监考老师看见所有学生的红灯都亮后,监考老师收取第一份试卷。
(5)所有学生的第二道题都做完之后考生才可以离开教室。

10个考生可以当做我们代码中的10个线程,监考老师作为其他线程。
以下为这场考试中涉及到的CountDownLatch和CyclicBarrier部分:

  • 10个考生全部到齐之后开考,这个过程即为CyclicBarrier。
  • 10个学生全部答完第一道题目后,监考老师收取第一份试卷,这个过程即为CountDownLatch。
  • 10个学生全部答完第二道题后,即所有人的绿灯都亮后,大家才可以离开教室,这个过程即为CyclicBarrier。

分析:
(1)能否开考是由考生是否全部到齐决定的。10个学生没有全部到齐,是不可以开考的,也就是在阻塞状态。
(2)考生答完第一道题目,按红灯,相当于代码中的countDown(),之后学生还可以接着做第二道题,并不会被阻塞。收卷的监考老师即为我们代码中的其他线程,他会等到所有学生的红灯都亮起后开始收卷。

总结:
由以上可知,CountDownLatch中的线程只是在满足某个条件之后,对其他线程进行通知,并不会影响自己本身线程的执行,而CyclicBarrier中的线程必须等到所有组内线程都满足某个条件之后,大家才能执行之后的动作。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值