首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在所有提交的任务完成后不阻塞地关闭Java执行器

在所有提交的任务完成后不阻塞地关闭Java执行器
EN

Stack Overflow用户
提问于 2016-05-17 13:23:28
回答 1查看 4.3K关注 0票数 6

我想知道是否有一种方法可以关闭ExecutorService并允许所有提交的任务在不阻塞的情况下完成。

更具体地说,我想安排一个延迟的Runnable,然后继续代码,而不需要保留对ExecutorService的引用就可以关闭它。

以下代码将终止提交的任务,因为它尚未启动:

代码语言:javascript
运行
复制
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdown();
...

在任务完成之前,此代码将被阻塞:

代码语言:javascript
运行
复制
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.awaitTermination(timeout, TimeUnit.MILLISECONDS);
...

我想要这样的东西:

代码语言:javascript
运行
复制
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdownAfterTerminationWithoutBlocking();
...
code that runs without waiting

我知道使用Timer是可能的,但我想知道这是否有可能使用ExecutorService

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-17 13:37:11

ExecutorService.shutdown javadoc说:

启动有序关机,执行以前提交的任务,但不接受任何新任务。

因此,已经提交但尚未开始的任务将被执行。完全符合你的需要。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37277469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档