gpt4 book ai didi

java - 了解 java 执行程序服务关闭和 awaitTermination

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:45:52 29 4
gpt4 key购买 nike

需要澄清以下行为。

我有一个带有 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"),尽管 执行器。 awaitTermination(15, TimeUnit.MINUTES) 有 15 分钟的等待时间。

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

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

最佳答案

ExecutorService.awaitTermination 的 Javadoc说:

Blocks until all tasks have completed execution after a shutdown request, or the timeout occurs, or the current thread is interrupted, whichever happens first.

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

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

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

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com