各种工人之间的共享执行者服务

时间:2016-05-19 17:49:26

标签: java multithreading

我想在各种读者对象中使用公共线程池。每个阅读器将使用池中的线程异步读取。这是我如何定义我的执行者:

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对象。所有这些都完成后我可以关闭执行程序服务。如何检测到没有更多任务在运行?我可以使用不同类型的线程池吗?

1 个答案:

答案 0 :(得分:0)

听起来你需要ExecutorCompletionService

ExecutorCompletionService completionService = new ExecutorCompletionService(executor);

while (completionService.poll() != null) {
    System.out.println("Still working...");
}

executor.shutdown();