我想在各种读者对象中使用公共线程池。每个阅读器将使用池中的线程异步读取。这是我如何定义我的执行者:
public static ExecutorService executor = Executors.newFixedThreadPool();
我想在TableReader对象中使用它。例如,有一个函数readRows,如下所示:
executor.submit(new AsyncRowReader(...));
但是,我不知道如何处理shutdown()步骤。 TableReader是jar的一部分,可以像这样使用:
TableReader r = new TableReader(...);
while (not done) {
r.readRow(...);
}
单个应用程序中可能有多个TableReader对象。所有这些都完成后我可以关闭执行程序服务。如何检测到没有更多任务在运行?我可以使用不同类型的线程池吗?
答案 0 :(得分:0)
听起来你需要ExecutorCompletionService:
ExecutorCompletionService completionService = new ExecutorCompletionService(executor);
while (completionService.poll() != null) {
System.out.println("Still working...");
}
executor.shutdown();