Future.get() 和 InterruptedException 异步线程
-
20-08-2019 - |
题
我在我的应用程序中使用 httpClient 异步线程。我像这样使用 Future Api 拨打电话
mStrResults = (String) rssFuture.get();
此调用尝试检索从我的 Callable httpClient call() 方法返回的 html 字符串。
然而,我想要做的是确保 get 方法在执行 call() 方法时不会等待太久。我应该在调用 rssFuture.get() 时传递超时参数,还是可以用 InterruptedException catch 块包围?
另外,异步线程在抛出 InterruptedException 之前是否有一个默认的等待时间,如果是的话,我可以设置一个自定义值吗?
解决方案
调用rssFuture.get()
时,应通过一个超时参数和捕捉TimeoutException异常。一个InterruptedException只会如果运行的call
线程获取与Thread.interrupt
方法中断或如果你调用在未来obj中的cancel(true)
方法发生。
其他提示
你应该使用未来。get(长超时, TimeUnit 单位), ,并捕获 TimeoutException。get()没有默认超时,它会等待 永远.
除非调用 Future.get() 的线程被中断,否则不会抛出 InterruptedException。
不隶属于 StackOverflow