¿Por qué el scheduleWithFixedDelay de Java funciona con un Runnable pero no un FutureTask envolviendo un ejecutable?¿Por qué el scheduleWithFixedDelay de Java funciona con un Runnable pero no un FutureTask <?> que envuelve un elemento ejecutable?
Esto se puede demostrar muy fácilmente con dos diferentes ejemplos de código:
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleWithFixedDelay(new FutureTask<Integer>(new Callable<Integer>() {
@Override
public Integer call() throws Exception {
System.out.println("beep");
return 1;
}
}), 1, 5, TimeUnit.SECONDS);
produce:
pitido
Pero la aplicación no sale, simplemente parece que esperar .
pero:
ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
executorService.scheduleWithFixedDelay(new Runnable() {
@Override
public void run() {
System.out.println("beep ");
}
}, 1, 5, TimeUnit.SECONDS);
produce:
pitido pitido pitido pitido pitido
en intervalos de 5 segundos.
Parece que hay algún tipo de bloqueo aquí que no puedo determinar.
Cada vez que ejecuto el código que produce el beep beep beep beep beep, ni siquiera recibo un bip, y el proceso finaliza incluso antes de la ejecución. Si cambio el retraso inicial de 1 a 0, obtengo un pitido. – Marcus
No importa, eso era porque necesitaba un ejecutorService.awaitTermination() para bloquear hasta que finalizara. – Marcus