如何立即停止在Java.util.Timer类中安排的任务

时间:2010-10-29 09:04:11

标签: java timer scheduled-tasks schedule

我尝试了一切。这也是How to stop the task scheduled in Java.util.Timer class

我有一个实现java.util.TimerTask

的任务

我用两种方式称呼该任务:

  1. 我安排这样的计时器:

    timer.schedule(timerTask,60 * 1000);

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

    cancelCurrentWork();   timer.schedule(timerTask,0);

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

    但我需要它停止。

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

    此实现只是取消了计时器,但目前正在完成任务。

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

    在计时器中有一种方法可以停止当前正在执行的操作,比如Thread.kill()之类的东西吗?当我需要停止任务时,我希望它丢失所有数据。

2 个答案:

答案 0 :(得分:6)

计时器无法将任务停在其轨道上。

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

答案 1 :(得分:0)

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

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