一尘不染

CountDownLatch和CyclicBarrier的实际示例

java

我们的一位培训人员在解释CountDownLatch和CyclicBarrier之间的区别时给出了一个示例。

CountDownLatch:假设一块石头可以举起10个人,那么您将等待所有10个人来来。然后只有您才能抬起石头。

CyclicBarrier:如果您要去野餐,则需要首先在某个共同点上认识,从这里大家开始旅程。

如果有人同意这些意见,请给我一些细节。

我已经阅读了这两个类的sun API。但我需要更多解释。


阅读 157

收藏
2020-12-03

共1个答案

一尘不染

关键区别在于CountDownLatch将线程分为服务者和到达者,而所有使用a的线程CyclicBarrier同时扮演这两个角色。

  • 使用闩锁,服务员等待最后一个到达的线程到达,但是那些到达的线程自己不做任何等待。
  • 有了障碍,所有线程都会到达,然后等待最后一个线程到达。

您的闩锁示例暗示所有十个人必须等待一起举起石头。不是这种情况。现实中更好的例子是考试提示器,它耐心地等待每个学生上交考试。一旦完成考试并可以自由离开,学生就不必等待。一旦最后一名学生参加考试(或时间限制到期),提示器将停止等待并退出测试。

2020-12-03