Comment arrêter la tâche planifiée dans la classe Java.util.Timer

91

J'utilise la java.util.timerclasse et j'utilise sa méthode de planification pour effectuer une tâche, mais après l'avoir exécutée 6 fois, je dois arrêter sa tâche.

Comment dois-je faire ça?

om.
la source

Réponses:

141

Gardez une référence à la minuterie quelque part et utilisez:

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

pour arrêter tout ce qu'il fait. Vous pouvez mettre ce code dans la tâche que vous effectuez avec un static intpour compter le nombre de fois où vous êtes allé, par exemple

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

     ... perform task here ....

}
Fritz H
la source
10
Je pense que l'annulation est suffisante, pas besoin de purge
LiangWang
1
est-il bon d'ajouter timer.cancel () en finale selon (Effetive Java book)
Tushar Pandey
1
@Jacky c'est une bonne pratique d'avoir les deux, mais théoriquement, cancelcela fonctionnerait.
Fritz H
10
@Jacky a raison. Regardez l'implémentation de Timer. Appeler purge après annulation est absolument inutile. Annuler efface toute la liste des tâches, tandis que la purge itère sur la même liste, vérifie si l'état est ANNULÉ, puis supprime les tâches.
Boyan
2
si l'activité / le fragment qui a démarré le Timer est détruit ou arrêté, le Timer programmé s'arrête-t-il de lui-même?
aLL
27

Vous devez arrêter la tâche que vous avez programmée sur le minuteur: Votre minuteur:

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

Pour arrêter:

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

Notez que le simple fait d'annuler la minuterie ne mettra pas fin aux tâches horaires en cours.

Vering
la source
J'ai deux méthodes: est-il possible d'arrêter TimerTask à partir d'une méthode différente?
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.
Abhi
la source
1

Arrêtez la minuterie une fois après le réveil à un moment précis en millisecondes.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Ajay Kumar
la source