2012-10-17 9 views
6

Ho un singleThreadExecutor che sto alimentando un Runnable con uno scheduledFixedDelay come questoPosso forzare un'esecuzione extra di un'esecuzione pianificata?

Runnable periodic = new Runnable() { ... } 

ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor(); 
executor.scheduleWithFixedDelay(periodic, 1, 1, TimeUnit.MINUTES); 

Verrà eseguito con 1 minuto di ritardo tra le esecuzioni. Il problema è che a volte ho bisogno di eseguirlo "su richiesta". È possibile?

Ho pensato di annullare l'esecuzione, eseguire il Runnable e riavviare l'esecuzione, ma quello che mi piacerebbe davvero è un metodo semplice che esegue solo il Runnable a capo del tempo e lo riprogramma per eseguirlo di nuovo in un minuto.

risposta

4

Quando si desidera il compito di eseguire è possibile inviarlo

executor.submit(periodic); 

o aggiungere con un ritardo

executor.schedule(periodic, delay, units); 
+0

Ma se l'esecutore già hanno questa Runnable o di esecuzione o in programma quello che accadrà poi ? –

+0

Sarebbe eseguito entrambe le volte che lo hai chiesto di eseguire. –

+2

Anche se non esattamente quello che volevo, ho approvato questa risposta. Mi piacerebbe davvero fare l'esecuzione * pianificata * ora invece di quando era stata pianificata, ma funziona anche per aggiungere il periodico come un nuovo lavoro una tantum mentre sto usando un singleThreadScheduledExecutor. –