我正在编写代码,我需要确保在提交结果之前线程池中没有线程正在运行(以避免丢失我应该提交的数据)。对于这一点,我使用:我如何知道ThreadPoolExecutor中的线程已完成?
while (_executor.getActiveCount() > 0)
{
try
{
Thread.sleep(10); // milliseconds
}
catch (InterruptedException e)
{
// OK do nothing
}
}
但同事回顾指出,getActiveCount商务部指出:
- 返回正在积极
- 执行的线程的大致数量任务。
那么,有没有危险,我会得到了while循环,同时还有在游泳池活动线程?如果是这样,那么等待我的所有工作线程完成的正确方法是什么?
编辑:给更多的上下文:这是一个在线系统,其中包含执行程序服务的任务保持无限期运行。工作通过消息传递系统进入,放在执行程序中的一个线程中,不需要任何同步,工作就会进入消息传递系统的另一个队列。我不想杀死执行者等待完成任务。
你能等待的任务的执行,而不是等待执行是没有工作? http://stackoverflow.com/questions/12896755/executorservice-with-invokeall-and-future-in-java – zapl