我有以下情况:生产者 - 消费者:怎么知道通知prodcution完成
- 阅读从数据库
- 数据做工作“计算”
- 结果写入数据库
我有一个线程从数据库读取并将生成的对象放入BlockingQueue。这些对象的体重非常大,因此队列限制了内存中对象的数量。 多个线程从队列中取对象,执行工作并将结果放入第二个队列中。 最终线程从第二个队列获取结果并将结果保存到数据库。
问题是如何防止死锁,例如。 “计算线程”需要知道何时不会有更多的对象被放入队列。 目前我通过传递线程(可调用)的引用来实现此目的,并在poll或offer之前检查thread.isDone(),然后如果元素为null。我还检查队列的大小,只要有元素,就必须消耗。使用take或put会导致死锁。
有没有更简单的方法来实现这一目标?
可能是一个愚蠢的http://stackoverflow.com/questions/5326013/proper-implementation-of-producer-consumer-scenario-and-graceful-termination-of – 2011-09-06 05:19:45