Как остановить задачу, запланированную в классе 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
если действие / фрагмент, запустивший таймер, уничтожен или остановлен, остановится ли таймер по расписанию самостоятельно?
все


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);
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.