Estoy usando ScheduledExecutorService, y después de llamar al método shutdown, no puedo programar un Runnable en él. Si llama al scheduleAtFixedRate(runnable, INITIAL_DELAY, INTERVAL, TimeUnit.SECONDS)
después de shutdown()
lanza java.util.concurrent.RejectedExecutionException. ¿Hay alguna otra forma de ejecutar una nueva tarea después de llamar al shutdown()
en ScheduledExecutorService?ScheduledExecutorService start stop several times
Respuesta
Puede reutilizar el programador, pero no debe apagarlo. En su lugar, cancele el hilo en ejecución que puede obtener al invocar 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()
Pude cerrar y crear nuevos servicios en un entorno Spring, pero los EJB me causaban dolor. Esto hizo el truco, gracias! –
@Alex El primer objeto futuro no se lanzará, hasta que se cierre el servicio. Será una pérdida de memoria cuando el servicio dura mucho y se programará muchas veces. Si es cierto, ¿hay alguna forma de evitar la pérdida de memoria? – Nickolas
Estoy equivocado, el futureTask cancelado no se agregará a workQueue, por lo que será liberado por GC. – Nickolas
Los javadocs de shutdown()
dicen:
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.
¿Alguna sugerencia sobre cómo reprogramar nuevas tareas después del cierre? – walters
Cree un nuevo ScheduledExecutorService o no cierre el existente. ¿Hay alguna razón por la que lo cierras? –
No puede hacer que su ejecutor acepte nuevas tareas después de apagarlo. La pregunta más relevante es por qué necesita cerrarla en primer lugar. Los ejecutores que crees deben reutilizarse a lo largo de la vida de tu aplicación o subsistema.
- 1. start-stop-daemon y Python
- 2. Spring ScheduledTask - Start/Stop Support?
- 3. start-stop-daemon y el programa java
- 4. start-stop-daemon argumentos citados malinterpretados
- 5. implementar start and stop sensor android
- 6. Start/Stop DispatcherTimer de un hilo diferente
- 7. ¿Éxito con start-stop-daemon y mono-service2?
- 8. ScheduledExecutorService with variable delay
- 9. start-stop-daemon no escribe en el archivo nginx.pid aunque el archivo esté presente
- 10. Start/Stop Pool de aplicaciones IIS6.0 con Powershell o la línea de comandos
- 11. ¿Cuál es la diferencia entre 'IsEnabled' y 'Start/Stop' de DispatcherTimer?
- 12. God stop resque workers rastrillo
- 13. Obtener Windows Times Reboot Timestamp?
- 14. Release vs Debug Build Times
- 15. Android mediarecorder stop failed
- 16. Diferencia entre AlarmManager y ScheduledExecutorService
- 17. ScheduledExecutorService múltiples hilos en paralelo
- 18. Stop Spinner.js
- 19. Ciclo de vida del applet: ¿cuál es la diferencia práctica entre init() y start(), y destroy() & stop()?
- 20. Git: Stop git push
- 21. Jquery Stop Fadein/Fadeout
- 22. PHP stop foreach()
- 23. Restkit, Stop Logging?
- 24. Stop en primer error
- 25. Buscando Clarity en Java ScheduledExecutorService y FutureTask
- 26. Determine cuándo se lanzará un ScheduledExecutorService siguiente
- 27. ¿Cómo reprogramar una tarea usando un ScheduledExecutorService?
- 28. Usando System.Windows.Forms.Timer.Start()/Stop() versus Enabled = true/false
- 29. java web start JAVA_HOME
- 30. Java Web Start getDocumentBase
Ese es el comportamiento esperado. ¿Podría explicar qué está tratando de hacer y por qué quiere ejecutar otro ejecutable después de que se apaga? – Jeremy