Документ Timer
( java.util.Timer
) описывает метод cancel
как тот, который влияет на таймер, и в нем говорится что таймер нельзя использовать после отмены. Поэтому я создаю новый экземпляр Timer
. Почему это не позволит мне повторно использовать аргумент task0
в этом примере? Я даже не использую чистку
, которая описана как приведение задач к требованиям сборщика мусора. Пока не будет объяснено обратное, я утверждаю, что класс Timer
не должен воздействовать на объект TimerTask
, который является просто аргументом для него.
import java.util.Timer;
import java.util.TimerTask;
public class Tester {
public static void main(String[] args) throws InterruptedException {
long delay = 3000L;
Timer timer0 = new Timer();
Task task0 = new Task();
timer0.schedule(task0, delay);
timer0.cancel();
Timer timer1 = new Timer();
timer1.schedule(task0, delay); // throws an exception if we use task0
Thread.sleep(5000);
timer1.cancel();
}
}
class Task extends TimerTask {
Task() {
}
@Override
public void run() {
System.out.println("task was invoked");
}
}