我需要一些帮助来了解使用 CountDownLatch 相对于传统等待通知的优势。我认为notifyAll()确实做了同样的事情,而且看起来更容易使用(可能是因为熟悉)。
另外, CountDownLatch 中的 wait() 和 wait() 有什么区别?
Thanks !
编辑:我想我需要重新表述我的查询:
Await() 根据文档说:
导致当前线程wait直到锁存器倒数为零,除非线程被中断。
对我来说,很难看出 wait() 和 wait() 之间的区别 - wait() 确实在幕后使用 wait(),并且当计数达到零时似乎有一个隐式的 notificationAll() 。
我想问的是,为什么我不应该简单地使用 wait-notifyAll() 机制(带有我自己的计数器变量处理),而不是使用 CountDownLatch ?
他们当然不会做同样的事情:CountDownLatch
仅当事件计数达到 0 时发出信号,并且它会自动发出信号,wait-notify
如果您想实现相同的行为,则要求您保留自己的计数。实现相同的行为通常很容易出错,最好避免它(特别是如果您不熟悉并发编程)。比较CountDownLatch
and wait-notify
这甚至不是苹果与橘子的比较,它更像是自动钻头和内六角扳手的比较。
不知道你有没有用过notifyAll()
and CountDownLatch
, but notifyAll()
除非您计算过发生了多少事件,否则单独不会给您带来相同的行为。CountDownLatch
可能最适合执行固定数量的任务并等待这些任务完成,然后再恢复执行程序的其余部分。当您有固定数量的线程时(例如,ThreadPool
)执行固定数量的任务,但是您的线程比任务少得多,您必须重用它们。与一个CountDownLatch
您可以轻松等待所有任务完成。不知道你用得怎么样notifyAll()
实现相同的行为,但如果您向我们提供更多信息,我们可以确定两者中哪一个是更好的选择(当然在某些情况下waitNotify()
更合适)。
关于之间的区别wait()
and await()
,我对你有些失望!查找文档是任何问题的第一步:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html
await()
是一个实际函数CountDownLatch
然而wait()
继承自Object
。我建议您检查文档以了解它们的作用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)