Future.get () и InterruptedException Асинхронный поток - PullRequest
1 голос
/ 09 декабря 2008

Я использую асинхронную многопоточность в моем приложении с httpClient. Я звоню, используя Future Api, вот так

mStrResults = (String) rssFuture.get();

этот вызов пытается получить строку html, возвращенную из моего вызываемого метода httpClient call ().

Однако я хочу убедиться, что метод get не ждет слишком долго при выполнении метода call (). Должен ли я передать параметр тайм-аута при вызове rssFuture.get (), или это нормально, просто окружить блоком захвата InterruptedException?

Также существует ли время по умолчанию, которое асинхронный поток будет ожидать, прежде чем выдать InterruptedException, и если да, то можно ли установить пользовательское значение?

Ответы [ 2 ]

3 голосов
/ 09 декабря 2008

При вызове rssFuture.get() вы должны передать параметр timeout и перехватить исключение TimeoutException. InterruptedException произойдет только в том случае, если поток, выполняющий ваш call, прерывается с помощью метода Thread.interrupt или если вы вызываете метод cancel(true) в объекте Future.

3 голосов
/ 09 декабря 2008

Вы должны использовать Future. get (long timeout, TimeUnit unit) и перехватывать TimeoutException. Для get () тайм-аута по умолчанию нет, он будет ждать forever .

InterruptedException не будет выброшено, если поток, вызывающий Future.get () не будет прерван.

...