ho un'operazione pianificata (in esecuzione in esecuzione ritardo fisso), ha iniziato in questo modo:Qual è il modo corretto di riavviare un'attività pianificata di ScheduledExecutorService?
executoreService.scheduleWithFixedDelay(repeatingThread, 0, numOfSeconds, TimeUnit.SECONDS);
a ogni avvio del ciclo, controllo per un cambiamento in un file di impostazioni, e poi voglio riavviare l'attività . Il file delle impostazioni contiene anche la lunghezza dell'intervallo (numOfSeconds
nel codice sopra).
Attualmente, sto usando il seguente codice per riavviare l'attività:
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);
io non sono sicuro di queste chiamate API. Qual è il modo consigliato di riavviare l'attività (eventualmente con un nuovo ritardo)?
È qualcosa da considerare, ma è più semplice implementare qualcosa che copra qualsiasi caso di modifica delle impostazioni. Ad esempio, qualsiasi modifica nel file delle impostazioni * potrebbe * modificare anche il ritardo. Quindi, invece di controllare se il ritardo è stato cambiato e quindi fare una cosa, e se non era poi qualcos'altro, allora preferirei ricominciare da capo. – Ovesh