5

我什么都试过了。这也是如何停止在 Java.util.Timer 类中安排的任务

我有一个实现 java.util.TimerTask 的任务

我以两种方式调用该任务:

  1. 我像这样安排定时器:

    timer.schedule(timerTask, 60 * 1000);

  2. 有时我需要立即开始这项工作,如果有任何工作,它必须取消 timerTask

    取消当前工作();timer.schedule(timerTask, 0);

此实现不会停止当前工作:(文档说:如果在此调用发生时任务正在运行,则任务将运行到完成,但永远不会再次运行)

但我需要它停下来。

public static void cancelCurrentwork() {
 if (timerTask!= null) {
  timerTask.cancel();
 }
}

这个实现只是取消了定时器,但是让当前正在做的任务完成。

public static void cancelCurrentwork() {
 if (timer!= null) {
  timer.cancel();
 }
}

计时器中有没有办法停止当前正在执行的任务,比如 Thread.kill() 之类的?当我需要停止该任务时,我希望它释放所有数据。

4

2 回答 2

6

Timer 无法在其轨道上停止任务。

您将需要在正在运行的任务本身中有一个单独的机制来检查它是否应该继续运行。例如,您可以有一个AtomicBoolean keepRunning变量,当您希望任务终止时将其设置为 false。

于 2010-10-29T09:08:41.493 回答
0

如果您的计时器正在使用某种文件/套接字等,您可以从计时器外部关闭该对象,计时器任务将引发异常,您可以使用它来停止计时器。

但总的来说,您需要某种毒丸才能成功停止单独的线程/计时器。

于 2010-10-31T06:10:07.083 回答