Мені потрібна якась послуга, яка виконуватиме декілька завдань одночасно та з інтервалом у 1 секунду протягом 1 хвилини.
Якщо одне із завдань не вдається, я хочу зупинити службу і кожне завдання, яке було з ним, з якимось індикатором, що щось пішло не так, інакше, якщо через одну хвилину все піде добре, сервіс припиниться індикатором, що все пішло добре.
Наприклад, у мене є 2 функції:
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();
Будь-які ідеї щодо того, як я повинен вирішити це і зробити речі максимально загальними?
Math.rand
це не вбудований API. ВпровадженняRunnable
повинні матиvoid run
визначення. Типtask1/2schedule
будеScheduledFuture<?>
в наданому контексті. Переходячи до власне питання, як це можна використатиawaitTermination
? Ви могли це зробити такscheduledExecutorService.awaitTermination(1,TimeUnit.MINUTES);
. Як варіант, що робити перевірка, чи скасоване будь-яке завдання перед його нормальним завершеннямif (task1schedule.isCancelled() || task2schedule.isCancelled()) scheduledExecutorService.shutdown();
:?