关机和等待第一次呼叫有什么区别?

2022-08-31 14:53:39

两者之间有什么区别

ExecutorService eService = Executors.newFixedThreadPool(2);
eService.execute(new TestThread6());
eService.execute(new TestThread6());
eService.execute(new TestThread6());
eService.awaitTermination(1, TimeUnit.NANOSECONDS);
eService.shutdown();

eService.shutdown();
eService.awaitTermination(1, TimeUnit.NANOSECONDS);

我真的不明白.此方法不会等待以前提交的任务完成执行。这是否意味着可以终止已提交但未完成的任务?我尝试了一些例子,他们没有证明这一点,请给我一个例子。shutdown()shutdown()


答案 1

您应该先致电。否则,您可能会等待很长时间,因为实际上并没有关闭您的执行器。shutdownawaitTermination

如果要等待任务完成,而不是等待执行程序关闭,则应使用 。invokeAll


答案 2

阅读文档始终有助于:

现在关机

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

此方法不会等待主动执行的任务终止。使用 awaitTermination 来执行此操作。

除了尽最大努力停止处理主动执行的任务之外,没有其他保证。此实现通过 Thread.interrupt() 取消任务,因此任何无法响应中断的任务都可能永远不会终止

关机

启动有序关机,其中将执行以前提交的任务,但不接受任何新任务。如果已经关闭,则调用不会产生其他影响。

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

等待终止

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