2012-12-14 3 views
11

Warum gibt es keine isCancelled Methode für ein java.util.Timer Objekt?Überprüfung, ob ein Java Timer abgebrochen wird

Ich möchte eine Aufgabe planen, wenn der Timer nicht abgebrochen wurde, und führen Sie es direkt (auf dem gleichen Thread), wenn es abgebrochen wurde.

Ist die einzige Option, um die IllegalStateException zu fangen, die auftreten könnte, wenn der Timer bereits abgebrochen wurde? (Es fühlt sich falsch an, einen IllegalStateException zu fangen).

Antwort

14

Wie sicher sind Sie, dass Sie Timer verwenden möchten? Verwenden Sie stattdessen ExecutorService, die isShutdown hat und eine Reihe anderer Vorteile zu booten hat. Eine allgemeine Empfehlung von Java 5 bestand darin, Timer s durch ExecutorService s zu ersetzen.

Es gibt eine ScheduledExecutorService Schnittstelle speziell für geplante Executor-Dienste. Instanziieren Sie mit einer der Methoden Executors.new....

+1

Bedeutet dies, dass die 'Timer' Klasse mehr oder weniger veraltet ist? –

+3

Ja, das könnte man sagen. Wenn es Ihrer Rechnung entspricht, verwenden Sie es, aber wenn nicht, gehen Sie zu "ExecutorService" und schauen Sie nie zurück. Auf den zweiten Blick ist sogar dieser Ratschlag gefährlich: Wenn Sie mit "Timer" beginnen und Ihr Projekt wächst, werden Sie vielleicht bereuen, nicht mit "ExecutorService" begonnen zu haben. –

+1

Veraltet? Nein, aber für viele Aufgaben ungeeignet. http://stackoverflow.com/questions/2213109/java-util-timer-is-it-deprecated –