我正在准备一个应用程序,其中单个生产者会生成数百万个任务,然后由可配置数量的消费者进行处理。从生产者到消费者的通信(可能)将基于队列实现。
从运行生产者/生成任务的线程中,我可以使用哪种方法来等待所有任务完成? 我不想恢复任何定期轮询以查看我的任务队列是否为空。无论如何,任务队列为空并不能保证最后一个任务已经完成。这些任务可能是相对长时间运行的,因此很有可能在消费者线程仍在愉快处理时任务队列为空。
此致,Maarten
从运行生产者/生成任务的线程中,我可以使用哪种方法来等待所有任务完成? 我不想恢复任何定期轮询以查看我的任务队列是否为空。无论如何,任务队列为空并不能保证最后一个任务已经完成。这些任务可能是相对长时间运行的,因此很有可能在消费者线程仍在愉快处理时任务队列为空。
此致,Maarten
CountDownLatch
,我添加了另一个示例。 - b_erbAtomicInteger
、一个易失的布尔值和一个内部的CountDownLatch(1)
来实现应该很容易,甚至可以使用AbstractQueuedSynchronizer
。 - b_erb