Як зупинити завдання, заплановане в класі Java.util.Timer


91

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

Як мені це зробити?

Відповіді:


141

Зберігайте десь посилання на таймер і використовуйте:

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

зупинити все, що робить. Ви можете помістити цей код всередину завдання, яке виконуєте, за допомогою a, static intщоб підрахувати, скільки разів ви обійшли, наприклад

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

     ... perform task here ....

}

10
Я думаю, що скасування досить, не потрібно проводити чистку
LiangWang

1
чи добре додавати timer.cancel () у фіналі згідно (Ефективна книга про Java)
Тушар Панді

1
@Jacky - це хороша практика мати обидва, але теоретично cancelсаме це буде працювати.
Fritz H

10
@Jacky має рацію. Подивіться на реалізацію таймера. Викликати очищення після скасування абсолютно марно. Cancel видаляє весь список завдань, тоді як очищення повторюється по тому самому списку, перевіряє, чи скасовано стан, а потім видаляє завдання.
Боян

2
якщо активність / фрагмент, який запускав таймер, буде знищений або зупинений, чи планується таймер зупинитися самостійно?
Все


27

Вам слід зупинити завдання, яке ви запланували на таймері: Ваш таймер:

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

Зверніть увагу, що просто скасування таймера не призведе до припинення поточних завдань таймера.


У мене два методи. Чи можна зупинити 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.