So stoppen Sie die in der Java.util.Timer-Klasse geplante Aufgabe


91

Ich benutze java.util.timerclass und ich benutze seine Schedule-Methode, um eine Aufgabe auszuführen, aber nachdem ich sie 6 Mal ausgeführt habe, muss ich ihre Aufgabe stoppen.

Wie soll ich das machen

Antworten:


139

Behalten Sie irgendwo einen Verweis auf den Timer und verwenden Sie:

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

zu stoppen, was auch immer es tut. Sie können diesen Code in die Aufgabe einfügen, die Sie mit a ausführen, um static intzu zählen, wie oft Sie herumgegangen sind, z

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

     ... perform task here ....

}

10
Ich denke, Abbrechen ist genug, muss nicht gelöscht werden
Jacky

1
ist es gut, timer.cancel () im Finale gemäß (Effetive Java book)
Tushar Pandey

1
@Jacky es ist eine gute Praxis, beides zu haben, aber theoretisch cancelwürde es selbst funktionieren.
Fritz H

10
@ Jacky ist richtig. Schauen Sie sich die Implementierung von Timer an. Das Aufrufen von purge nach dem Abbrechen ist absolut nutzlos. Abbrechen löscht die gesamte Aufgabenliste, während die Bereinigung dieselbe Liste durchläuft, prüft, ob der Status ABGESAGT ist, und entfernt dann die Aufgaben.
Boyan

2
Wenn die Aktivität / das Fragment, die bzw. das den Timer gestartet hat, zerstört oder gestoppt wird, stoppt der geplante Timer dann von selbst?
ALL


27

Sie sollten die Aufgabe stoppen, die Sie für den Timer geplant haben: Ihr Timer:

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

Um aufzuhören:

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

Beachten Sie, dass nur das Abbrechen des Timers laufende Timertasks nicht beendet.


Ich habe zwei Methoden. Ist es möglich, TimerTask von einer anderen Methode abzuhalten?
Sachin HR

15
timer.cancel();  //Terminates this timer,discarding any currently scheduled tasks.

timer.purge();   // Removes all cancelled tasks from this timer's task queue.

1

Beenden Sie den Timer einmal nach dem Aufwachen zu einem bestimmten Zeitpunkt in Millisekunden.

Timer t = new Timer();
t.schedule(new TimerTask() {
            @Override
             public void run() {
             System.out.println(" Run spcific task at given time.");
             t.cancel();
             }
 }, 10000);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.