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