需要澄清以下行为。

我有一个带有 java.util.concurrent.ExecutorService 的 java 应用程序,如下所示,

       for (int i = 0; i < thread_count; i++) {
            Runnable worker = new MyThread(batchSize);
            executor.execute(worker);
        }

        executor.shutdown();
        executor.awaitTermination(15, TimeUnit.MINUTES);
        System.out.println("All threads are finished");

在上面的代码中,我有 5 个线程,它们在 10 分钟内完成,它将执行 System.out.println("All threads are finished") ,即使 executor.awaitTermination(15, TimeUnit.MINUTES) 有 15 分钟的等待时间。

但是当我删除 executor.shutdown() 时,程序将等待 15 分钟,这是在 executor.awaitTermination(15, TimeUnit.MINUTES) 语句中指定的,然后再执行下一行。

任何人都可以解释这种行为吗?为什么没有关闭命令会等待指定的时间,即使所有线程都已完成?

最佳答案

ExecutorService.awaitTermination 的 Javadoc 说:



因此,当您调用 shutdown() 时:您的线程将在 10 分钟内完成。然后 awaitTermination 立即返回(无需等待 15 分钟过去)。

但是,如果您删除对 shutdown() 的调用,则没有关闭请求,因此 awaitTermination 不会返回,直到超时过去(15 分钟)

关于java - 理解java executor服务关闭和awaitTermination,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26604590/

10-11 04:52