Come interrompere l'attività pianificata nella classe Java.util.Timer


91

Sto usando la java.util.timerclasse e sto usando il suo metodo di pianificazione per eseguire alcune attività, ma dopo averlo eseguito per 6 volte devo interrompere il suo compito.

Come dovrei farlo?

Risposte:


141

Tieni un riferimento al timer da qualche parte e usa:

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

per fermare qualunque cosa stia facendo. Puoi inserire questo codice all'interno static intdell'attività che stai eseguendo con un per contare il numero di volte che sei andato in giro, ad es

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

     ... perform task here ....

}

10
Penso che l'annullamento sia sufficiente, non è necessario avere l'eliminazione
LiangWang

1
è bene aggiungere timer.cancel () in finale secondo (Effetive Java book)
Tushar Pandey

1
@ Jacky è una buona pratica avere entrambi, ma teoricamente cancelfunzionerebbe.
Fritz H

10
@Jacky ha ragione. Guarda l'implementazione di Timer. Chiamare l'eliminazione dopo l'annullamento è assolutamente inutile. Annulla cancella l'intero elenco delle attività, mentre l'eliminazione ripete lo stesso elenco, controlla se lo stato è ANNULLATO e quindi rimuove le attività.
Boyan

2
se l'attività / frammento che ha avviato il timer viene distrutto o interrotto, il timer programmato si ferma da solo?
aLL


27

Dovresti interrompere l'attività che hai programmato sul timer: Il tuo timer:

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

Per fermarsi:

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

Si noti che la semplice cancellazione del timer non terminerà le attività temporali in corso.


Ho due metodi È possibile interrompere TimerTask da un metodo diverso?
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

Termina il timer una volta dopo il risveglio in un momento specifico in millisecondi.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.