【发布时间】:2011-09-06 05:12:40
【问题描述】:
我有以下情况:
- 从数据库中读取数据
- 做“计算”工作
- 将结果写入数据库
我有一个线程从数据库中读取数据并将生成的对象放入 BlockingQueue。这些对象非常重,因此队列限制了内存中的对象数量。 多个线程从队列中获取对象,执行工作并将结果放入第二个队列。 最后一个线程从第二个队列中获取结果并将结果保存到数据库中。
问题是如何防止死锁,例如。 “计算线程”需要知道何时不再有对象放入队列。 目前,我通过将线程的引用(可调用)相互传递并在轮询或提议之前检查 thread.isDone() 以及元素是否为空来实现这一点。我还检查了队列的大小,只要其中有元素,就必须消耗。使用 take 或 put 会导致死锁。
有没有更简单的方法来实现这一点?
【问题讨论】:
标签: java producer-consumer executorservice termination blockingqueue