Come per la mia richiesta, devo eseguire del codice particolare dopo un certo periodo di tempo. Per fare lo stesso che ho scelto ScheduledExecutorService.scheduleWithFixedDelay(runnable, 0, 5, TimeUnit.SECONDS)
e che sta funzionando bene per me. Ma secondo il mio un altro requisito, il termine indicato nella fixedDelay
dovrebbe essere configurabile in fase di esecuzione. Mezzi, attualmente totale di ritardo è di 5 secondi, ma quest'ultimo se l'utente vuole poi può modificare il tempo in 60 secondi e in fase di esecuzione fixedDelay
verrà eseguito dopo 60 secondi. Qualsiasi aiuto sarebbe apprezzabile.Reinitialize ritardo correzione in ScheduledExecutorService
Si prega di vedere il codice:
static int i = 0;
static ScheduledExecutorService executor;
static Runnable runnable;
static ScheduledFuture<?> future;
public static void main(String args[]) {
executor = Executors
.newScheduledThreadPool(1);
runnable = new Runnable() {
@Override
public void run() {
System.out.println("Inside runnable" + i++);
changeDelay();
}
};
future =
executor.scheduleWithFixedDelay(runnable, 0, 5, TimeUnit.SECONDS);
}
public static void changeDelay() {
future.cancel(false);
future = executor.scheduleWithFixedDelay(runnable, 0, 10, TimeUnit.SECONDS);
}
Qui ho usato il metodo changeDelay per modificare il tempo di ritardo. Ma non sta funzionando.
'ScheduledExecutorService.scheduleWithFixedDelay (eseguibile, 0, ritardo, TimeUnit.SECONDS)' dove 'delay' è una variabile fornita da classi esterne? – sanbhat
Funziona. Vedi l'esempio nella risposta. Il tuo test non è molto buono perché l'attività iniziale viene eseguita con un ritardo pari a 0 di quanto sia immediatamente annullato e la nuova attività ha un ritardo di 0 e così via, non puoi vedere i ritardi. – dcernahoschi