我试图了解如何处理执行Runnable命令的ExecutorService的许多实例。关于提供的代码,如果我执行一百个Runnables并将固定线程池设置为1,则需要多少次关闭?我认为代码应该在for循环执行顺序中使用单个线程顺序执行一百个期货(从不产生多于一个线程),并且需要单个ExecutorService关闭。它是否正确?此外,在for循环完成后立即调用shutdown是可以的,因为所有100个期货都在队列中,因此在所有一百个期货完成后,executorService将自动关闭。只是寻找一些澄清,谢谢。
public static void main(String[] args)
{
private static ExecutorService executorService = Executors.newFixedThreadPool(1);
for (int i = 0; i < 100; i++)
{
executorService.execute(new Runnable() {
@Override
public void run()
{
// do stuff
}
});
}
executorService.shutdown();
}
答案 0 :(得分:0)
看起来你有正确的想法。无论你移交给ExecutorService运行多少Runnables或者你分配了多大的线程池,你只需要调用一次shutdown()。这将允许所有任务完成,但不允许您添加任何新任务。你可能想打电话
try {
executorService.awaitTermination(5, TimeUnit.MINUTES);
} catch (InterruptedException e) {
// do stuff
}
在所有任务完成时阻止,具体取决于您的使用场景。
如果要关闭并尝试终止所有正在运行的任务,请调用shutdownNow()方法。请注意,无法保证它能够中断正在运行的任务。