需要澄清以下行为。
我有一个带有 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/