Necesito algún tipo de servicio que ejecute algunas tareas simultáneamente y en un intervalo de 1 segundo durante 1 minuto.
Si una de las tareas falla, quiero detener el servicio y cada tarea que se ejecutó con algún tipo de indicador de que algo salió mal, de lo contrario, si después de un minuto todo salió bien, el servicio se detendrá con un indicador de que todo salió bien.
Por ejemplo, tengo 2 funciones:
Runnable task1 = ()->{
int num = Math.rand(1,100);
if (num < 5){
throw new Exception("something went wrong with this task,terminate");
}
}
Runnable task2 = ()->{
int num = Math.rand(1,100)
return num < 50;
}
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2);
task1schedule = scheduledExecutorService.scheduleAtFixedRate(task1, 1, 60, TimeUnit.SECONDS);
task2schedule = scheduledExecutorService.scheduleAtFixedRate(task2, 1, 60, TimeUnit.SECONDS);
if (!task1schedule || !task2schedule) scheduledExecutorService.shutdown();
¿Alguna idea sobre cómo debería abordar esto y hacer que las cosas sean lo más genéricas posible?
Math.randno es una API incorporada. Una implementación deRunnabledebe tener unavoid rundefinición. Tipo detask1/2scheduleestaríaScheduledFuture<?>en el contexto proporcionado. Pasando a la pregunta real, ¿cómo se utilizaawaitTermination? Podrías hacer eso comoscheduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);. Alternativamente, ¿qué pasa con verificar si alguna de las tareas se canceló antes de su finalización normalif (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();:?