Установите задачу для повторного выполнения через определенный промежуток времени (многопоточность) Java

#java #multithreading

Вопрос:

У меня есть служба исполнителей, которой будут назначены 3 задачи. Каждая задача будет подключаться к веб-сайту и извлекать с него данные (используя библиотеку jsoup). Для каждой задачи потребуется около 0,5 с, чтобы получить данные. Но иногда jsoup не сможет подключиться к этому сайту, и для исключения SocketTimeoutException требуется более 5 секунд.

Но я хочу, чтобы, если одна из трех задач займет более 2 секунд, jsoup повторно попытается подключиться. Есть ли какие-либо решения для этого?

Это пример моего кода:

 ExecutorService es = Executors.newCachedThreadPool();

es.execute(() -> {
    task1: connect to website 1 and fetch data
});

es.execute(() -> {
    task2: connect to website 2 and fetch data
});

es.execute(() -> {
    task3: connect to website 3 and fetch data
});

es.shutdown();
 

Спасибо всем, кто прочитал это!

Комментарии:

1. Смотреть Jsoup.parse(URL url, int timeoutMillis) в.

2. ага. Спасибо вам за помощь, но если время превысит тайм-аут, jsoup выдаст исключение, не пытайтесь повторно подключиться. Проблема все еще существует..

3. Разработайте утилиту для повторной попытки, или вы можете использовать готовые, например: https://kymr.github.io/2017/01/09/RetryUtils-with-java8/