J'ai besoin d'une sorte de service qui exécutera quelques tâches simultanément et dans un intervalle de 1 seconde pendant 1 minute.
Si l'une des tâches échoue, je veux arrêter le service et toutes les tâches qui l'ont exécuté avec une sorte d'indicateur que quelque chose s'est mal passé, sinon si après une minute tout s'est bien passé, le service s'arrêtera avec un indicateur que tout s'est bien passé.
Par exemple, j'ai 2 fonctions:
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();
Avez-vous des idées sur la façon de résoudre ce problème et de rendre les choses aussi génériques que possible?
Math.rand
n'est pas une API intégrée. Une implémentation deRunnable
doit avoir unevoid run
définition. Le type detask1/2schedule
seraitScheduledFuture<?>
dans le contexte fourni. Passant à la question réelle, comment est-il utiliséawaitTermination
? Vous pourriez faire ça commescheduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);
. Sinon, qu'en est- vérifier si l' une des tâches a été annulé avant son achèvement normal:if (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();
?