ScheduledExecutorService
Ich wünsche Ihnen eine Alternative zu den Timer bieten mit - ScheduledThreadPoolExecutor, eine Implementierung der ScheduledExecutorService Schnittstelle. Es hat einige Vorteile gegenüber der Timer-Klasse (aus "Java in Concurrency"):
Ein Timer erstellt nur einen einzigen Thread zum Ausführen von Timer-Aufgaben. Wenn eine Timer-Task zu lange dauert, kann die Timing-Genauigkeit anderer TimerTasks leiden. Wenn eine wiederkehrende TimerTask alle 10 ms ausgeführt wird und eine andere Timer-Task 40 ms benötigt, wird die wiederkehrende Task (abhängig davon, ob sie mit fester oder fester Verzögerung geplant wurde) viermal in schneller Folge nach der langen aufgerufen -Running-Task beendet oder "vermisst" vier Aufrufe vollständig. Geplante Threadpools berücksichtigen diese Einschränkung, indem Sie mehrere Threads zum Ausführen von zurückgestellten und periodischen Tasks bereitstellen können.
Ein anderes Problem mit Timer ist, dass es sich schlecht verhält, wenn eine TimerTask eine ungeprüfte Ausnahme auslöst. Der Timer-Thread fängt die Ausnahme nicht ab, sodass eine ungeprüfte Ausnahme, die von einer TimerTask ausgelöst wird, den Timer-Thread beendet. Der Timer lässt den Thread in dieser Situation auch nicht wieder auferstehen. Stattdessen wird fälschlicherweise davon ausgegangen, dass der gesamte Timer abgebrochen wurde. In diesem Fall werden TimerTasks, die bereits geplant, aber noch nicht ausgeführt wurden, nie ausgeführt, und neue Aufgaben können nicht geplant werden. (Dieses Problem wird als "Thread Leakage" bezeichnet).
Und eine weitere Empfehlung, wenn Sie Ihren eigenen Zeitplanungsdienst erstellen müssen, können Sie möglicherweise noch die Bibliothek nutzen, indem Sie eine DelayQueue verwenden, eine BlockingQueue-Implementierung, die die Planungsfunktion von ScheduledThreadPoolExecutor bietet. Eine DelayQueue verwaltet eine Sammlung von verzögerten Objekten. A Delayed hat eine damit verbundene Verzögerungszeit: Mit DelayQueue können Sie ein Element nur dann übernehmen, wenn seine Verzögerung abgelaufen ist. Objekte werden von einer DelayQueue zurückgegeben, die nach der Zeit angeordnet ist, die mit ihrer Verzögerung verknüpft ist.
** Quartz Scheduler **, um Java-Anwendung zu scheduler einen Job/eine Aufgabe zu einem bestimmten Datum und Uhrzeit zu ermöglichen [überprüfen Sie das vollständige Beispiel] (http://geekonjava.blogspot.com/2015/05/how -to-Scheduling-Job-in-Java-via.html) – GeekOnJava