我需要一些帮助了解使用CountDownLatch比传统等待通知的优势。 我认为notifyAll的()确实做同样的事情,它似乎更容易使用(因为熟悉的可能)。
此外,什么是wait()和等待()从CountDownLatch有什么区别?
谢谢 !
编辑:我想我需要重新整理我的查询:
等待()按照文档说:
导致当前线程等待 ,直到锁存器倒计数至零,除非线程被中断。
对于我来说,很难看到等待之间的差异()和等待() - 等待()确实使用下盖的wait(),似乎有一个隐含的notifyAll的(),当计数到达零。
我的意思要问了,为什么我不应该简单地用一个等待notifyAll的()机制(用我自己的计数器变量处理),而不是去为CountDownLatch?
他们肯定不会做同样的事情: CountDownLatch
当事件计数达到0,它这样做自动,仅有的信号wait-notify
要求你保持自己的计数,如果你想要达到相同的行为。 实现相同的行为往往容易出错,并且您避免它,它是最好的(特别是如果你是新来的并发编程)。 比较CountDownLatch
和wait-notify
是很难甚至是拿苹果和橘子相比,它更像是一个比较自动挖掘和内六角扳手。
我不知道你是否已经使用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
。 我建议你检查的文档,他们做了什么。