他们当然不会做同样的事情:
CountDownLatch仅在事件计数达到0时发出信号,并且会自动
wait-notify计数,如果您想要实现相同的行为,则需要保留自己的计数。实现相同的行为通常容易出错,最好避免这种情况(尤其是如果您不熟悉并发编程)。比较
CountDownLatch和
wait-notify很难甚至是拿苹果和橘子相比,它更像是一个比较自动挖掘和内六角扳手。
我不知道您是否曾经使用过
notifyAll()和
CountDownLatch,但
notifyAll()除非您一直记下发生了多少事件,否则单独不会给您相同的行为。
CountDownLatch最适合执行固定数量的任务并等待这些任务完成,然后再继续执行其余程序。当您有固定数量的线程(例如
ThreadPool)执行固定数量的任务时,它特别有用,但是您的线程比任务少,您必须重用它们。使用a,
CountDownLatch您可以轻松地等待所有任务完成。我不知道您如何一直使用
notifyAll()以实现相同的行为,
waitNotify()
更合适)。
对于之间的区别
wait()和
await(),我有点失望了!查找文档是任何问题的第一步:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html
await()是的实函数,
CountDownLatch而是
wait()从继承的
Object。我建议您检查文档中的内容。



