Meine Antwort wäre, Timer
nicht zu verwenden, da er veraltet ist. Seit Java5 wurde Timer
durch den ScheduledExecutorService
ersetzt, der flexibler und einfacher zu verwenden ist. Sie haben feinere Kontrolle darüber, wie der Scheduler funktioniert, eine Kontrolle, die Sie mit Timer
nicht haben.
Sie erstellen einen mit der Factory-Klasse Executors, die über verschiedene Factory-Methoden verfügt. Die, auf die Sie schauen sollten, ist newSingleThreadScheduledExecutor, der genau das tun sollte, was Sie suchen:
Erstellt einen Executor mit einem einzigen Thread, der Befehle planen kann, um nach einer angegebenen Verzögerung auszuführen oder periodisch auszuführen. Aufgaben sind garantiert, dass sie sequenziell ausgeführt werden und nie mehr als eine Aufgabe aktiv sein wird zu einem gegebenen Zeitpunkt.
Mit einem ScheduledExecutorService
, anstatt TimerTask
zu unterklassen, unterklassieren Sie Runnable
direkt und reichen dann die Aufgabe beim Executor ein. Es gibt verschiedene Methoden auf dem Executor, Sie müssen auswählen, welche für Ihre Bedürfnisse geeignet ist (lesen Sie die javadoc für ScheduledExecutorService
sorgfältig durch), aber im Wesentlichen geht es so:
// Initialisieren des Executors
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
while (tasksRemaining) {
// Erstellen Sie Ihre Aufgabe
Runnable task = ....;
// Reichen Sie es beim Executor ein, indem Sie eine der verschiedenen scheduleXYZ-Methoden verwenden
executor.schedule(task, delay, unit);
}
// Wenn alles fertig ist, den Executor herunterfahren
executor.shutdown();
Wie immer, lesen Sie die javadoc.