Java 如何确定线程池已完成所有作业?
我从这个问题中得到了帮助 <> 但这并不能解决我的问题。也许在某些方面我错了Java 如何确定线程池已完成所有作业?,java,multithreading,threadpool,Java,Multithreading,Threadpool,我从这个问题中得到了帮助 但这并不能解决我的问题。也许在某些方面我错了 for (ReadProcess_MongoDB readData : readProcessMongoObj) executor.execute((Runnable) readData); executor.shutdown(); executor.awaitTermination(1, TimeUnit.MINUTES); } catch (Interr
for (ReadProcess_MongoDB readData : readProcessMongoObj)
executor.execute((Runnable) readData);
executor.shutdown();
executor.awaitTermination(1, TimeUnit.MINUTES);
}
catch (InterruptedException e) {
//Log exception here
} finally {
executor.shutdownNow();
printTime();
}
public void printTime()
{
for(int i=0;i<numberOfThreads;i++)
System.err.println("used Time "+timeArrObj[i]);
}
for(ReadProcess\u MongoDB readData:readProcessMongoObj)
executor.execute((Runnable)readData);
executor.shutdown();
执行人。等待终止(1,时间单位。分钟);
}
捕捉(中断异常e){
//此处记录异常
}最后{
执行者。关机现在();
打印时间();
}
公共无效打印时间()
{
对于(int i=0;i这是由于打印输出时线程交错造成的。我猜提交给executor的任务不够长,无法阻止WaitTermination方法,executor立即关闭,这反过来又在finally block中调用printTime()方法
在waitTermination()方法调用之后添加Thread.sleep()可以提供一个延迟,使您获得所需的输出。这里的一个常见解决方案是使用。当然,如果您知道有多少任务,它就可以正常工作。
如果您不知道可以尝试的任务数量(并且感觉像cpt.Kirk)。
此解决方案更灵活。您是否尝试过参考资料中提到的完成服务?我在您的示例中没有看到