倒计时闩锁和循环巴里尔的现实生活示例

2022-09-01 04:03:10

我们的一位培训师在解释CountDownLatch和CyclicBarrier之间的区别时举了一个例子。

CountDownLatch:假设一块石头可以被10个人举起,这样你就会等待所有10个人的到来。然后只有你可以举起石头。

CyclicBarrier:如果你要去野餐,你需要先在一些共同点见面,然后你们都会从那里开始你的旅程。

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

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


答案 1

在假设的剧院中:

  • 如果只允许一个人观看戏剧,则称为Mutex
  • 如果允许N个人数观看该剧,则称为信号量。如果有人在戏剧期间离开剧院,那么其他人可以被允许观看戏剧。
  • 它被称为CountDownLatch,如果没有人被允许进入,直到每个人都离开剧院。在这里,每个人都有离开剧院的自由意愿。
  • 它被称为CyclicBarrier,如果戏剧在每个人都进入剧院之前不会开始。在这里,表演者不能开始表演,直到所有人都进入并抓住座位。一旦戏剧完成,同样的障碍将被应用于下一个节目。

在这里,一个人是一根线,一场戏是一种资源


答案 2

关键区别在于,将线程分为服务员和到达者,而所有使用线程的线程都执行这两个角色。CountDownLatchCyclicBarrier

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

您的闩锁示例意味着所有十个人都必须等待一起抬起石头。事实并非如此。一个更好的现实世界的例子是考试提示者,他耐心地等待每个学生交考。学生在完成考试后不会等待,可以自由离开。一旦最后一名学生参加考试(或时间限制到期),提示器就会停止等待并带着测试离开。


推荐