gpt4 book ai didi

java - 等待通知和 CountDownLatch 之间的区别

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:03:19 24 4
gpt4 key购买 nike

我需要一些帮助来了解使用 CountDownLatch 相对于传统等待通知的优势。我认为 notifyAll() 确实做了同样的事情,而且似乎更容易使用(可能是因为熟悉)。

另外,CountDownLatch 的 wait() 和 await() 有什么区别?

谢谢!

编辑:我想我需要重新表述我的查询:

Await() 按照文档说:

Causes the current thread to wait until the latch has counted down to zero, unless the thread is interrupted.

对我来说,很难看出 wait() 和 await() 之间的区别 - await() 确实在幕后使用 wait(),并且当计数达到零时似乎有一个隐式的 notifyAll()。

我想问的是,为什么我不应该简单地使用 wait-notifyAll() 机制(使用我自己的计数器变量处理),而不是使用 CountDownLatch ?

最佳答案

它们肯定不会做同样的事情:CountDownLatch 仅在事件计数达到 0 时发出信号并且它会自动执行,wait-notify 要求您保持如果你想实现相同的行为,你自己算数。实现相同的行为通常很容易出错,最好避免这种情况(尤其是如果您不熟悉并发编程)。比较 CountDownLatchwait-notify 甚至不是苹果与橘子的比较,它更像是自动钻头和内六角 Spanner 的比较。

我不知道您是否使用过notifyAll()CountDownLatch,但是单独使用notifyAll() 不会给您相同的行为,除非你一直在计算发生了多少事件。 CountDownLatch 可能最适合执行固定数量的任务并等待这些任务完成,然后再继续执行程序的其余部分。当您有固定数量的线程(例如 ThreadPool)执行固定数量的任务时,它特别有用,但您的线程比任务少得多,您必须重用它们。使用 CountDownLatch,您可以轻松等待所有任务完成。我不知道您是如何使用 notifyAll() 来实现相同行为的,但是如果您向我们提供更多信息,我们可以确定两者中哪一个是更好的选择(有当然在某些情况下 waitNotify() 更合适)。

关于wait()await()的区别,我对你有点失望!查找文档是任何问题的第一步:

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

await()CountDownLatch 的实际函数,而 wait() 是从 Object 继承的。我建议您查看文档以了解它们的作用。

关于java - 等待通知和 CountDownLatch 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10594014/

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