ScheduledExecutorService从ExecutorService、停工()和shutdownNow()继承了两个方法。它们之间的区别是:
shutdown启动有序关闭,其中以前提交的任务将被执行,但不会接受任何新任务。如果已经关闭,则调用没有其他效果。shutdownNow尝试停止所有正在执行的任务,停止等待任务的处理,并返回等待执行的任务列表。
现在,我想停止等待任务的处理,而不想中断当前正在执行的任务。我不能中断线程,因为涉及到第三方库,并且它们不能很好地处理中断:-(但我需要取消排定任务,这些任务目前没有执行,因为大多数任务都在一个小时左右的时间内安排好。
处理这件事最好的方法是什么?我有什么选择?
发布于 2016-03-14 15:21:12
听起来,调用执行器上的setExecuteExistingDelayedTasksAfterShutdownPolicy(false)应该可以做到这一点:
设置是否执行现有延迟任务的策略,即使此执行器已关闭。在这种情况下,这些任务只会在shutdownNow上终止,或者在已经关闭时将策略设置为false之后终止。默认情况下,此值为true。
由于默认情况下它是true,所以将执行这些任务。如果将其设置为false,则不应该再执行它们。这不应与您引用的文档所引用的已提交任务混淆。当有一个自由工人的时候,他们只是在队列中等待执行。
https://stackoverflow.com/questions/35991183
复制相似问题