繁体   English   中英

在所有提交的任务完成后关闭 Java Executor 没有阻塞

[英]Shutdown Java Executor After All Submitted Tasks Finished Without Blocking

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

更具体地说,我想延迟一个Runnable并继续执行代码,而不需要保留对ExecutorService的引用来关闭它。

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

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdown();
...

虽然此代码将阻塞,直到任务完成:

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.awaitTermination(timeout, TimeUnit.MILLISECONDS);
...

我想要这样的东西:

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.schedule(runnable, delay, TimeUnit.MILLISECONDS);
executor.shutdownAfterTerminationWithoutBlocking();
...
code that runs without waiting

我知道这可以使用Timer但我想知道这是否可以使用ExecutorService

ExecutorService.shutdown javadoc 说:

启动有序关闭,其中执行先前提交的任务,但不会接受新任务。

因此,已提交但尚未启动的任务将被执行。 完全按照您的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM