ScheduledExecutorService继承了ExecutorService,shutdown()和shutdownNow()中的两种方法。他们之间的区别:
shutdown
启动有序关闭,其中先前提交的任务被执行,但不会接受任何新任务。如果已经关闭,调用没有额外的效果。
shutdownNow
尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。
现在我想暂停等待任务的处理,而我不想中断当前正在执行的任务。我无法中断线程,因为涉及第三方库并且它们不能很好地处理中断:-(但我需要取消scheduled任务,这些任务当前没有执行,因为大多数安排在一个小时左右。
最好的解决方法是什么?我有什么选择?
答案 0 :(得分:5)
听起来像执行者上的setExecuteExistingDelayedTasksAfterShutdownPolicy(false)应该这样做:
设置是否执行现有延迟任务的策略 此执行程序已关闭。在这种情况下,这些任务只会 在shutdownNow时终止,或者在将策略设置为false时终止 已经关机了。默认情况下,此值为true。
由于默认情况下为true
,因此会执行这些任务。如果将其设置为false
,则不应再执行它们。这不应与您引用的文档引用的提交的任务相混淆。当有一个自由工作者时,他们正在排队等待立即执行。