Почему TimerTask нельзя повторно использовать с новым объектом Timer?

Документ 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");
    }
}
9
задан H2ONaCl 31 March 2012 в 00:04
поделиться