#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/