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

om.
quelle

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 ....

}
Fritz H.
quelle
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.

Vering
quelle
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.
Abhi
quelle
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);
Ajay Kumar
quelle