【问题标题】:Future.get() and InterruptedException Asynchronous threadingFuture.get() 和 InterruptedException 异步线程
【发布时间】:2010-09-26 01:27:53
【问题描述】:

我在带有 httpClient 的应用程序中使用异步线程。我像这样使用 Future Api 拨打电话

mStrResults = (String) rssFuture.get();

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

我想要做的是确保 get 方法在执行 call() 方法时不会等待太久。我应该在调用 rssFuture.get() 时传递超时参数,还是只用 InterruptedException 捕获块包围?

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

【问题讨论】:

    标签: java multithreading asynchronous timeout future


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 是的,说得好。在记录了两个异常后,我得出了相同的结论。但我保留了两个错误处理程序。
      猜你喜欢
      • 2011-05-15
      • 2017-09-23
      • 1970-01-01
      • 2011-07-03
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-05-31
      相关资源
      最近更新 更多