我想知道是否有一种方法可以关闭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
发布于 2016-05-17 05:37:11
ExecutorService.shutdown
javadoc说:
启动有序关机,执行以前提交的任务,但不接受任何新任务。
因此,已经提交但尚未开始的任务将被执行。完全符合你的需要。
https://stackoverflow.com/questions/37277469
复制相似问题