shutdown()和shutdownNow()的混合

时间:2016-03-14 15:09:38

标签: java java.util.concurrent

ScheduledExecutorService继承了ExecutorServiceshutdown()shutdownNow()中的两种方法。他们之间的区别:

  

shutdown启动有序关闭,其中先前提交的任务被执行,但不会接受任何新任务。如果已经关闭,调用没有额外的效果。

     

shutdownNow尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。

现在我想暂停等待任务的处理,而我不想中断当前正在执行的任务。我无法中断线程,因为涉及第三方库并且它们不能很好地处理中断:-(但我需要取消scheduled任务,这些任务当前没有执行,因为大多数安排在一个小时左右。

最好的解决方法是什么?我有什么选择?

1 个答案:

答案 0 :(得分:5)

听起来像执行者上的setExecuteExistingDelayedTasksAfterShutdownPolicy(false)应该这样做:

  

设置是否执行现有延迟任务的策略   此执行程序已关闭。在这种情况下,这些任务只会   在shutdownNow时终止,或者在将策略设置为false时终止   已经关机了。默认情况下,此值为true。

由于默认情况下为true,因此会执行这些任务。如果将其设置为false,则不应再执行它们。这不应与您引用的文档引用的提交的任务相混淆。当有一个自由工作者时,他们正在排队等待立即执行。