我试图了解如何处理执行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();
}
1 回答
看起来你有正确的想法 . 无论你移交给ExecutorService运行多少Runnables或者你分配了多大的线程池,你只需要调用一次shutdown() . 这将允许所有任务完成,但不允许您添加任何新任务 . 你可能想打电话
根据您的使用场景完成所有任务时阻止 .
如果要关闭并尝试终止所有正在运行的任务,请调用shutdownNow()方法 . 请注意,无法保证它能够中断正在运行的任务 .