que tienen una tarea programada (que se ejecuta en la ejecución de retardo fijo), comenzó así:¿Cuál es la forma correcta de reiniciar una tarea programada de ScheduledExecutorService?
executoreService.scheduleWithFixedDelay(repeatingThread, 0, numOfSeconds, TimeUnit.SECONDS);
En cada inicio de ciclo, puedo comprobar si hay un cambio en un archivo de configuración, y luego deseo reiniciar la tarea . El archivo de configuración también contiene la longitud del intervalo (numOfSeconds
en el código anterior).
Actualmente, estoy usando el siguiente código para reiniciar la tarea:
executoreService.shutdownNow();
try {
while(!executoreService.awaitTermination(5, TimeUnit.SECONDS)){
logger.debug("awaiting termintation");
}
} catch (InterruptedException e) {
logger.debug("interrupted, continuing", e);
}
// initialize startup parameters
init();
// start the main scheduled timer
executoreService.scheduleWithFixedDelay(repeatingThread, 0, numOfSeconds, TimeUnit.SECONDS);
No estoy seguro acerca de estas llamadas a la API. ¿Cuál es la forma recomendada de reiniciar la tarea (posiblemente con un nuevo retraso)?
Es algo a tener en cuenta, pero es más fácil implementar algo que cubrirá cualquier caso de cambio de configuración. es decir, cualquier cambio en el archivo de configuración * puede * también cambiar el retraso. Entonces, en lugar de verificar si la demora se modificó y luego hacer una cosa, y si no era otra cosa, preferiría reiniciar en cualquier caso. – Ovesh