首页 文章

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

提问于
浏览
0

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

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

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

    根据您的使用场景完成所有任务时阻止 .

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

相关问题