Как немедленно остановить задачу, запланированную в классе Java.util.Timer - PullRequest
5 голосов
/ 29 октября 2010

Я все перепробовал.Это тоже Как остановить задачу, запланированную в классе Java.util.Timer

У меня есть одна задача, которая реализует java.util.TimerTask

Я вызываю эту задачу в2 способа:

  1. Я планирую таймер следующим образом:

    timer.schedule (timerTask, 60 * 1000);

  2. иногда мне нужно, чтобы эта работа начиналась немедленно, и она должна отменить timerTask, если есть работающие

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

Эта реализация не останавливает текущую работу: (документация гласит: если задача выполняется во время этого вызова, задача будет выполнена до завершения, но никогда не запустится снова)

Но мне нужно, чтобы он остановился.

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

Эта реализация просто отменяет таймер, но оставляет текущее выполнение задачи завершенной.

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

Есть ли в таймере способ ОСТАНОВИТЬ текущее выполнение тактов, что-то вроде Thread.kill () или что-то в этом роде?Когда мне нужно остановить эту задачу, я хочу, чтобы она потеряла все свои данные.

Ответы [ 2 ]

6 голосов
/ 29 октября 2010

Таймер не может остановить задачу на своих треках.

Вам понадобится отдельный механизм в самой запущенной задаче, который проверяет, должна ли она продолжать работу.Например, у вас может быть переменная AtomicBoolean keepRunning, для которой вы установите значение false, когда хотите завершить задачу.

0 голосов
/ 31 октября 2010

если ваш таймер использует какой-то файл / сокет и т. Д., Вы можете закрыть этот объект снаружи таймера, и задача таймера сгенерирует исключение, и вы можете использовать его для остановки таймера.

но в целом вам нужна какая-то таблетка с ядом, чтобы успешно остановить отдельный поток / таймер.

...