Future.get()和InterruptedException异步线程

时间:2008-12-09 14:44:10

标签: java multithreading asynchronous timeout future

我在我的应用程序中使用异步线程与httpClient。我使用Future Api打电话

mStrResults = (String) rssFuture.get();

此调用尝试检索从Callable httpClient call()方法返回的html字符串。

我想要做的是确保get方法在执行call()方法时不会等待太长时间。我应该在调用rssFuture.get()时传递超时参数,还是可以用InterruptedException catch块进行环绕?

还有一个默认时间,异步线程在抛出InterruptedException之前会等待,如果可以,我可以设置自定义值吗?

2 个答案:

答案 0 :(得分:3)

您应该使用Future。get(long timeout, TimeUnit unit),并捕获TimeoutException。 get()没有默认超时,它将等待永远

除非调用Future.get()的线程被中断,否则不会抛出InterruptedException。

答案 1 :(得分:3)

调用rssFuture.get()时应该传递一个timeout参数并捕获TimeoutException。只有当运行call的线程被Thread.interrupt方法中断或者在Future obj中调用cancel(true)方法时,才会发生InterruptedException。