Frage

Ich bin mit ScheduledExecutorService , und nachdem ich es das shutdown Methode, ich kann nicht ein Runnable auf sie planen. Der Aufruf scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS) nach shutdown() wirft java.util.concurrent.RejectedExecutionException. Gibt es einen anderen Weg, um eine neue Aufgabe auszuführen, nachdem shutdown() auf ScheduledExecutorService ?

War es hilfreich?

Lösung

Sie können den Scheduler wieder verwenden, aber man sollte es nicht herunterfahren. Vielmehr brechen Sie den laufenden Threads, die Sie bekommen können, wenn scheduleAtFixedRate Methode aufgerufen wird. Ex:

//get reference to the future
Future<?> future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//cancel instead of shutdown
future.cancel(true);
//schedule again (reuse)
future = service.scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
//shutdown when you don't need to reuse the service anymore
service.shutdown()

Andere Tipps

Die javadocs von shutdown() sagen:

Initiates an orderly shutdown in which previously submitted tasks are executed,
but no new tasks will be accepted.

Also, man kann nicht shutdow() aufrufen und dann neue Aufgaben planen.

Sie können nicht machen Sie Ihre Testamentsvollstrecker neue Aufgaben übernehmen, nachdem es herunterzufahren. Die wichtigere Frage ist, warum Sie es schließen müssen in erster Linie nach unten? Die Testamentsvollstrecker Sie erstellen, sollten über die gesamte Lebensdauer Ihrer Anwendung oder Subsystems.

wiederverwendet werden
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top