【问题标题】:How to stop TimerTask already in execution?如何停止 TimerTask 已经在执行?
【发布时间】:2018-07-19 09:50:22
【问题描述】:

How to stop a running TimerTask

我已经浏览了上面的链接,但我的问题并没有完全解决。

我们可以通过调用timerObj.cancel() 来停止计时器。 cancel 方法的文档清楚地说:

取消 {@code Timer} 和所有计划任务。 如果有 当前运行的任务不受影响。此 {@code Timer} 上不能安排更多任务。后续调用什么都不做

所以我的问题/担心是,

如果很多 TimerTask 被安排在 timer 下,我们如何才能停止所有它们即使它们正在执行各自的 run 方法?有没有办法解决这个问题?

提前致谢。

【问题讨论】:

  • 当然有——抢任务杀了——
  • 你所说的“完成任务”是什么意思以及如何杀死它们?
  • ok 显示一些不错的代码 - 你按照你的逻辑设置要杀死的条件 - 我没有看到任何代码 - 每个任务都有一个运行,所以去那里设置条件
  • 看起来有人已经有了解决方案:*.com/questions/32045360/…
  • 如果你想要一个来自 Big Daddy 的漂亮预制命令,不要给你糖果!

标签: java multithreading timer


【解决方案1】:

您应该设计 run 方法,以便它可以自行确定何时终止,例如通过轮询 AtomicBoolean 的状态。

即使您要在find the thread 运行 TimerTask,在线程上调用 stop() 或类似方法也是inherently unsafe

【讨论】: