Ich verwende java.util.Timer, um eine periodische Aufgabe zu planen. An einem Punkt möchte ich es herunterfahren und warten, bis es beendet.Warten auf das Beenden eines Timers in Java
Timer.cancel() verhindert, dass zukünftige Aufgaben ausgeführt werden. Wie stelle ich sicher, dass keine Aufgaben im Moment ausgeführt werden (oder auf sie warten, wenn sie es sind?)
Ich kann externe Synchronisationsmechanismen einführen, aber ich sehe nicht, wie sie alle Fälle abdecken können. Zum Beispiel, wenn ich auf einem Monitor innerhalb der Aufgabe zu synchronisieren, vermisse ich immer noch den Fall, wenn die Aufgabe gerade gestartet, aber nicht den Monitor zu nehmen.
Was ist die empfohlene Vorgehensweise, um zu warten, bis alle Aufgaben ausgeführt wurden, einschließlich aktuell ausgeführter Aufgaben?
+1 helfen. Oder, wenn Sie aus irgendeinem Grund einen 'Timer' verwenden müssen, können Sie eine Bedingung verwenden (http://java.sun.com/j2se/1.5.0/docs/api/java/util/concurrent/locks/ Condition.html), um zwei Threads für ein Ereignis zu synchronisieren (z. B. die Fertigstellung der geplanten Aufgabe). –
Ja, Element 68 in Effective Java (2. Ausgabe) empfiehlt ScheduledThreadPoolExecutor als flexibleren Ersatz für Timer. +1 für das Erwähnen dieser, als empfohlene Praktiken wurden gefragt. – Jonik
Ja, ich sollte dieses Buch wirklich lesen. – ripper234