Thread.sleep alternative

Gunpowder

Mitglied
Hallo,
ich wollte mal wissen ob es eine bessere Methode wie Thread.sleep(millisec) gibt , da ich im Moment ein Bild anzeigen lasse und möchte nach 1 Sek ein anderes anzeigen aber ohne Thread.sleep(millisec)! Gibt es einen Tick oder eine andere Möglichkeit? Vielen Dank für Antworten!
 
Wieso verwendest du dafür Thread.sleep(long)? Wenn du nach einer Sekunde das Bild wechseln lassen willst, dann eignet sich ein Timer doch viel besser.
 
Hmm... Jetzt alle Timer zu erklären wäre schon nahezu ein Tutorial ...

Als grober Überblick: Es gibt verschiedene Timer. Welchen man einsetzt, hängt ein bisschen von der Persönlichen Vorliebe ab, aber auch was man machen will.

Das JDK bringt folgende Timer mit:
Java:
java.util.Timer
javax.swing.Timer
javax.management.timer.Timer
Alle drei Klasse besitzen Methoden, die den Timer eine Aktion entweder zeitversetzt oder zu einer bestimmten Zeit und mit Wiederholungen laufen lässt. Jeder Timer kann dabei mehrere Aktionen ausführen, man muss also nicht für jede Aktion einen eigenen Timer erzeugen.

Die nötigen Methoden von java.util.Timer beginnen mit schedule. Egal welche der Methoden man wählt, es muss immer ein java.uti.TimerTask Objekt übergeben werden, das ausgeführt werden soll, wenn der Timer "anspringt". TimerTask ist eine abstrakte Implementierung des Runnable-Interfaces, das heißt die Aktionen, die durchgeführt werden sollen, werden in der Methode run() implementiert.

javax.management.timer.Timer arbeitet ähnlich. Seine Methoden beginnen jedoch mit addNotification und man kann nicht gleich eine Aktion mit übergeben. Für die Registrierung der auszuführenden Aktionen muss man die Methode addNotificationListener() aufrufen und einen NotificationListener samt NotificationFilter registrieren. Ich muss ehrlich sagen, dass ich mit diesem Timer auch noch keine Erfahrung habe und sich das vermutlich so schnell auch nicht ändern wird, daher kann ich diesbezüglich keine Erfahrungsberichte anbieten ;)

javax.swing.Timer ist eine kleine Ausnahme. Dieser Timer will gleich im Konstruktor wissen, was für eine Verzögerung und welcher ActionListener für ihn zuständig ist. Es lassen sich auch weitere ActionListener registrieren, sodass mehrere Listener reagieren können. Allerdings beschränkt sich dieser Timer nur auf eine Verzögerung zwischen den Wiederholungen, ein bestimmter Zeitpunkt oder sowas ist nicht einstellbar.

Erfahrungen meinerseits:
Für das wiederholte Ausführen von bestimmten Aktionen (z.B. alle paar Sekunden nach Werten schauen oder sowas) eignet sich wohl der javax.swing.Timer am besten, da er diese Aufgabe ohne großen Aufwand erfüllt.
Wenn es ein bisschen mehr sein darf, wie z.B. das Ausführen zu bestimmten Zeitpunkten, dann ist java.util.Timer ideal. Er kann intervallgesteuerte Wiederholungen genauso verwalten, wie auch termingesteuerte und das gleichzeitig. Damit lassen sich also ziemlich komplexe Scheduling-Systeme realisieren.
Für noch mehr Komplexität kann man dann auch gern zu javax.management.timer.Timer greifen, da dieser sogar noch filtern kann. Allerdings wüsste ich jetzt spontan keinen Einsatz solcher Möglichkeiten, habe ich jedenfalls noch nie gebraucht.

Für weitere Informationen fragst du am besten mal Google, da gibt es genug Beispiele.
 
Zuletzt bearbeitet:

Neue Beiträge

Zurück