Java TimerTask не отменяется - PullRequest
       9

Java TimerTask не отменяется

1 голос
/ 16 декабря 2011

Мой CheckStatus (TimerTask) не останавливается, когда я вызываю метод cancel () внутри метода run. this.cancel () также не работает. Что я делаю не так?

import java.util.TimerTask;
class CheckStatus extends TimerTask {
   int s = 3;
   public void run() {
      if (s > 0)
      {
         System.out.println("checking status");
         s--;
      }
      else
      {
         System.out.println("cancel");
         cancel();
      }
   }
}

Вот мой водитель

import java.util.*;
class Game {
   static Timer timer;
   static CheckStatus status;

   public static void main(String[] args) throws InterruptedException {        
      CheckStatus status = new CheckStatus();
      timer = new Timer();
      timer.scheduleAtFixedRate(status, 0, 3000);
   }  
}

Ответы [ 2 ]

2 голосов
/ 16 декабря 2011

вы вызываете метод отмены задачи таймера, но вы должны вызвать метод отмены самого таймера, чтобы получить ожидаемое поведение.

2 голосов
/ 16 декабря 2011

Это работает для меня - используя именно тот код, который вы разместили, я увидел:

checking status
checking status
checking status
cancel

... и ничего больше, показывая, что TimerTask был отменен - ​​он никогда не выполняется снова.

Вы ожидали, что само Timer закроется, когда у него больше не будет работы?Это не делает это автоматически.Не ясно, какова ваша большая цель, но один из способов избежать этого - заставить TimerTask также отменить Timer - это будет работать, но это не очень приятно с точки зрения дизайна и означает, что TimerTaskне может нормально работать в таймере, который содержит другие задачи.

...