9.4 Die Klassen Timer und TimerTask
Die Implementierung von zeitgesteuerten Abläufen nimmt uns zum Teil die Java-Bibliothek ab, die dazu die Klassen Timer und TimerTask anbietet. Sie helfen bei der zeitgesteuerten Ausführung. Ein TimerTask ist eine Klasse, die uns Runnable implementieren lässt und Operationen umfasst, die zu einem Zeitpunkt oder in einer beliebigen Wiederholung ausgeführt werden sollen. Ein TimerTask wird dann einer Timer-Klasse übergeben, die den dazugehörigen Verwaltungs-Thread startet.
Beispiel Text auf dem Bildschirm ausgeben
|
Listing 9.5 TimerTaskDemo.java, Teil 1
import java.util.*;
class Task extends TimerTask
{
public void run()
{
System.out.println( "Make my day." );
}
}
Jetzt müssen wir nur noch dieses TimerTask-Objekt erzeugen und einer der Objektmethoden von Timer übergeben. In unserem Beispiel soll unser Text zwei Sekunden nach dem Eintragen auf dem Bildschirm ausgegeben werden und in einem zweiten Fall - nach einer Wartesekunde - alle fünf Sekunden.
Listing 9.6 TimerTaskDemo.java, Teil 2
public class TimerTaskDemo
{
public static void main( String args[] )
{
Timer timer = new Timer();
// nach 2 Sek geht's los
timer.schedule( new Task(), 2000 );
// nach 1 Sek geht's los und dann alle 5 Sekunden
timer.schedule( new Task(), 1000, 5000 );
}
}
Die schedule()-Methode gibt es in vier Ausführungen. Dazu kommen zwei Methoden scheduleAtFixedRate(), die versuchen, die Genauigkeit zu verbessern. Dies lohnt sich bei Operationen, die über einen langen Zeitraum präziser ohne Drift ausgeführt werden sollen, wie es etwa bei einer Uhr gilt, die jede Stunde ihren großen Zeiger bewegt. Selbst wenn Hintergrundoperationen, wie Garbage-Collection, die pünktliche Ausführung der Operation verhindern, wird die Verspätung bis zur nächsten Wiederholung aufgeholt.
Ein Timer kann abgebrochen werden, wenn die cancel()-Methode aufgerufen wird.
|