Как остановить задачу, запланированную в классе java.util.Timer

93

Я использую java.util.Timerкласс, и я использую его метод расписания для выполнения некоторой задачи, но после выполнения его 6 раз я должен остановить его задачу.

Как мне это сделать?

ом.
источник

Ответы:

141

Сохраните где-нибудь ссылку на таймер и используйте:

timer.cancel();
timer.purge();

чтобы остановить все, что он делает. Вы можете поместить этот код в задачу, которую вы выполняете, static intчтобы подсчитать, сколько раз вы проходили, например

private static int count = 0;
public static void run() {
     count++;
     if (count >= 6) {
         timer.cancel();
         timer.purge();
         return;
     }

     ... perform task here ....

}
Фриц Х
источник
10
Думаю, отмены достаточно, чистка не нужна
Лянванг
1
хорошо ли добавлять timer.cancel () в финал согласно (Эффективная книга Java)
Тушар Пандей
1
@Jacky - хорошая практика иметь и то, и другое, но теоретически cancelсамо по себе подойдет .
Fritz H
10
@ Джеки прав. Посмотрите на реализацию Таймера. Вызывать очистку после отмены абсолютно бесполезно. Отмена очищает весь список задач, в то время как очистка выполняет итерацию по тому же списку, проверяет, имеет ли статус ОТМЕНА, а затем удаляет задачи.
Боян
2
если действие / фрагмент, запустивший таймер, уничтожен или остановлен, остановится ли таймер по расписанию самостоятельно?
все
56

Либо вызов cancel()наTimer , если это все , что он делает, или cancel()наTimerTask , если сам таймер имеет другие задачи , которые вы хотите , чтобы продолжить.

Джон Скит
источник
28

Вы должны остановить задачу, которую вы запланировали на таймере: Ваш таймер:

Timer t = new Timer();
TimerTask tt = new TimerTask() {
    @Override
    public void run() {
        //do something
    };
}
t.schedule(tt,1000,1000);

Чтобы остановить:

tt.cancel();
t.cancel(); //In order to gracefully terminate the timer thread

Обратите внимание, что простая отмена таймера не приведет к прекращению текущих задач timertas.

Веринг
источник
У меня два метода. Можно ли остановить TimerTask с помощью другого метода?
Sachin HR
16
timer.cancel();  //Terminates this timer,discarding any currently scheduled tasks.

timer.purge();   // Removes all cancelled tasks from this timer's task queue.
Абхи
источник
1

Завершите таймер один раз после пробуждения в определенное время в миллисекундах.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Аджай Кумар
источник