Мне нужно периодически выполнять некоторые данные, для чего я хочу создать задачу, которая запрашивает некоторые данные с разных серверов. Некоторым серверам потребуется больше времени для обработки запроса и возврата ответа, чем другие.Расписание нескольких задач на несколько потоков
Вот почему я хочу создать задачу для каждого сервера и выполнить задачи async. Если я использую ScheduledExecutorService
следующим образом, каждая задача будет выполняться в своем потоке или все задачи будут выполняться в том же потоке?
Что произойдет, если задача выбрасывает исключение, все остальные запланированные задачи потерпят неудачу?
this.scheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
@Override
public Thread newThread(Runnable r) {
return new Thread(r, "collectionThread");
}
});
for (String url:urls){
this.scheduler.scheduleWithFixedDelay(new CollectorTask(url),
startupDelaySeconds,
scheduleRateSeconds,
TimeUnit.SECONDS);
}
Есть ли способ выполнить задачи async и предотвратить отмену задач после того, как один из них не работает? – Marius
Да, я обновил ответ. –
'Если какой-либо из них выдает исключение, все последующие исполнения выполняются.« Я так не думаю, текущий поток исполнителей будет завершен, но новый будет создан исполнителем. – Katona