ScheduledExecutorService de arranque y parada varias veces
-
25-09-2019 - |
Pregunta
Estoy usando ScheduledExecutorService , y después de lo llamo de shutdown , no puede programar una Ejecutable en él. Llamando scheduleAtFixedRate(runnable, INITIAL_DELAY,
INTERVAL, TimeUnit.SECONDS)
después shutdown()
lanza java.util.concurrent.RejectedExecutionException. ¿Hay otra manera de ejecutar una nueva tarea después shutdown()
se llama en ScheduledExecutorService ?
Solución
Se puede volver a utilizar el programador, pero no debe apagado ella. Más bien, cancelar el hilo conductor que se puede obtener cuando se invoca el método scheduleAtFixedRate. Ej:
//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()
Otros consejos
Los javadocs de shutdown()
decir:
Initiates an orderly shutdown in which previously submitted tasks are executed,
but no new tasks will be accepted.
Por lo tanto, no se puede llamar shutdow()
y luego programar nuevas tareas.
No se puede hacer que su ejecutor aceptar nuevas tareas después de apagarlo. La cuestión más relevante es la razón por lo que necesita para apagarlo en el primer lugar? Los ejecutores que cree deben ser re-utilizados en toda la duración de la aplicación o subsistema.