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 ?

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top