如何关闭ExecutorService Runnables的许多实例?

时间:2014-02-10 22:25:00

标签: java multithreading runnable executorservice future

我试图了解如何处理执行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 个答案:

答案 0 :(得分:0)

看起来你有正确的想法。无论你移交给ExecutorService运行多少Runnables或者你分配了多大的线程池,你只需要调用一次shutdown()。这将允许所有任务完成,但不允许您添加任何新任务。你可能想打电话

try {
    executorService.awaitTermination(5, TimeUnit.MINUTES);
} catch (InterruptedException e) {
    // do stuff
}

在所有任务完成时阻止,具体取决于您的使用场景。

如果要关闭并尝试终止所有正在运行的任务,请调用shutdownNow()方法。请注意,无法保证它能够中断正在运行的任务。