完成所有提交的任务后关闭Java执行程序而不会阻塞

时间:2016-05-17 13:23:28

标签: java executorservice scheduledexecutorservice java-threads

我想知道是否有办法关闭Java <script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>并允许所有提交的任务完成而不会阻塞。

更具体一点,我想安排ExecutorService延迟并继续使用代码,而无需保留对Runnable的引用以便能够将其关闭。< / p>

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

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

1 个答案:

答案 0 :(得分:5)

ExecutorService.shutdown javadoc说:

  

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

因此,已经提交但尚未开始的任务将被执行。正如您所需。