gpt4 book ai didi

java - java中的CountDownLatch有什么意义?

转载 作者:行者123 更新时间:2023-12-01 06:37:48 24 4
gpt4 key购买 nike

CountDownLatch java 中的同步实用程序是一个高级同步实用程序,用于防止特定线程在所有线程准备就绪之前开始处理。

但是,Semaphore完全可以做同样的事情。那么,CountDownLatch有什么优点呢? ?

还有一个问题:如果CountDownLatch确实有一些优点,为什么它被设计为只使用一次?我认为添加一个 set 方法来重置计数很容易。

最佳答案

从语义上来说,它们是不同的;这很重要,因为它使您的代码更易于阅读。当我看到信号量时,我立即开始思考“有限数量的共享资源”。当我看到 CountDownLatch 时,我立即开始思考“一堆线程在等待‘开始!’”信号。”如果您在实际需要后者的代码中给我前者,那就很困惑。

从这个意义上说,用作 CountDownLatch 的信号量有点像 garden-path sentence ;虽然技术上是正确的,但它会让人误入歧途并使他们感到困惑。

就更实用的用途而言,如果您只需要 CountDownLatch,那么 CountDownLatch 会更简单。越简单越好!

至于重用 CountDownLatch,这会使它的使用变得复杂。例如,假设您正在尝试将线程 A、B 和 C 排队以执行某些工作。你让他们在闩锁上等待,然后你松开它。然后重置它,可能是为了将线程 D、E 和 F 排队以进行其他工作。但是,如果(由于竞争条件)线程 B 实际上尚未从第一个闩锁中释放,会发生什么情况?如果它还没有到达 await() 调用怎么办?你是否关闭了它的门,并告诉它与 D、E 和 F 一起等待第二次打开?如果第二次打开取决于 B 应该做的工作,这甚至可能会导致僵局!

当我第一次读到 CountDownLatch 时,我对重置也有同样的疑问。但实际上,我很少想重置一个; “等待然后开始”(A-B-C,然后 D-E-F)的每个单元自然适合创建自己的 CountDownLatch 来配合它,并且事情保持良好和简单。

关于java - java中的CountDownLatch有什么意义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39286110/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com