为了账号安全,请及时绑定邮箱和手机立即绑定

ThreadPoolExecutor 关闭 API 文档措辞“不等待”

ThreadPoolExecutor 关闭 API 文档措辞“不等待”

不负相思意 2021-10-28 15:49:02
在ThreadPoolExector#shutdown的文档中,它说:此方法不等待先前提交的任务完成执行这意味着什么?因为我认为这意味着已提交的排队任务可能不会完成,但事实并非如此;请参阅此示例代码,它在启动所有提交的任务之前调用关闭:package example;import java.util.concurrent.*;public class ExecutorTest {    public static void main(String ... args) {        ExecutorService executorService = Executors.newFixedThreadPool(3);        for (int i = 0; i < 10; i++) {            final int count = i;            executorService.execute(() -> {                System.out.println("starting " + count);                try {                    Thread.sleep(10000L);                } catch (InterruptedException e) {                    System.out.println("interrupted " + count);                }                System.out.println("ended " + count);            });        }        executorService.shutdown();             }    }哪个打印:C:\>java -cp . example.ExecutorTeststarting 0starting 2starting 1ended 2ended 0starting 3starting 4ended 1starting 5ended 3ended 5ended 4starting 7starting 6starting 8ended 7ended 6ended 8starting 9ended 9C:\>在这个例子中,提交的任务完成执行似乎很清楚。我已经在带有 Oracle 和 IBM JDK 的 JDK8 上运行它并得到相同的结果。那么文档中的那一行是什么意思?还是有人为shutdownNow编写了这个并将其剪切n粘贴到文档中以不经意间关闭?
查看完整描述

2 回答

?
宝慕林4294392

TA贡献2021条经验 获得超8个赞

的 javadoc 的完整引用shutdown()

启动有序关闭,其中执行先前提交的任务,但不会接受新任务。如果已经关闭,调用没有额外的效果。

此方法不等待先前提交的任务完成执行。使用awaitTermination这样做。

关闭执行程序可防止提交新任务。

已经提交的任务,无论是开始还是在队列中等待,都会完成执行。


如果您不想执行排队任务,请调用shutdownNow()

尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。从该方法返回后,这些任务将从任务队列中排出(移除)

此方法不会等待主动执行的任务终止。使用awaitTermination这样做。

除了尽力尝试停止处理正在执行的任务之外,没有任何保证。此实现通过 取消任务Thread.interrupt(),因此任何未能响应中断的任务可能永远不会终止

已启动的任务是否停止取决于任务,如最后一段所述。


查看完整回答
反对 回复 2021-10-28
?
慕运维8079593

TA贡献1876条经验 获得超5个赞

在 的文档中ThreadPoolExector#shutdown,还有一句:

此方法不等待先前提交的任务完成执行。使用 awaitTermination 来做到这一点。

在这种情况下,这意味着调用者线程不会等待先前提交的任务完成执行。换句话说,shutdown()不会阻塞调用者线程。


如果您确实需要阻止调用者线程,请使用ThreadPoolExector#awaitTermination(long timeout, TimeUnit unit)

阻塞直到所有任务在关闭请求后完成执行,或者超时发生,或者当前线程被中断,以先发生者为准。


查看完整回答
反对 回复 2021-10-28
  • 2 回答
  • 0 关注
  • 182 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信