我正在使用一个ScheduledThreadPoolExecutor
来管理多个任务,并希望添加停止它们的选项。
我了解常规执行程序服务上的shutdown和shutdownNow之间的区别,并且有兴趣了解它会如何影响ScheduledThreadPoolExecutor
中的任务-在这些任务中,任务也计划定期运行。
给定一个正在运行的ScheduledThreadPoolExecutor
,它同时具有两个正在运行的任务,一次计划在将来运行的任务以及计划以固定间隔(每X分钟一次)运行的任务。
实施以下“命令”的最佳方法是什么:
答案 0 :(得分:3)
您可以使用方法:
public List<Runnable> shutdownNow()
,但是 请注意,当前正在执行的线程可能不会立即执行 终止。如果您想这样做,那么您必须找到一种方法 通过一个单独的线程或其他信号表示该进程已终止。来自Javadocs: 除了尽力而为,没有任何保证 停止处理主动执行的任务。这个实现 通过Thread.interrupt()取消任务,因此任何无法执行的任务 对中断的响应可能永远不会终止。
这可以通过使用以下方法来实现:
public void shutdown()
来自Javadocs: 如果已设置ExecuteExistingDelayedTasksAfterShutdownPolicy 错误,尚未延迟的现有延迟任务是 取消。除非 将ContinueExistingPeriodicTasksAfterShutdownPolicy设置为true, 现有的定期任务的将来执行将被取消。
答案 1 :(得分:1)
您可以使用
进行配置所以你的两种情况都是
shutdownNow
shutdown