Future.get() и InterruptedException Асинхронная обработка потоков
-
20-08-2019 - |
Вопрос
Я использую асинхронную обработку потоков в своем приложении С httpClient.Я делаю звонок, используя Future Api, вот так
mStrResults = (String) rssFuture.get();
этот вызов пытается получить строку html, возвращенную из моего метода Callable httpClient call().
Однако я хочу убедиться, что метод get не ждет слишком долго при выполнении метода call().Должен ли я передавать параметр тайм-аута при вызове rssFuture.get() или можно просто окружить блоком catch InterruptedException?
Также существует ли время по умолчанию, в течение которого асинхронный поток будет ждать, прежде чем выдать InterruptedException, и если да, могу ли я установить собственное значение?
Решение
Вы должны передать параметр таймаута при вызове rssFuture.get()
и поймать исключение TimeoutException.InterruptedException произойдет только в том случае, если поток, выполняющий ваш call
прерывается с Thread.interrupt
метод или если вы вызываете метод cancel(true)
метод в будущем obj.
Другие советы
Вам следует использовать Future.get(длинный таймаут, единица измерения TimeUnit), и поймать TimeoutException.Для get() нет тайм-аута по умолчанию, он будет ждать навсегда.
InterruptedException не будет создано, если поток, вызывающий Future.get(), не будет прерван.