未来超时和IO时间

时间:2015-06-30 20:53:10

标签: java multithreading

我有多个线程调用API。 API打开一个没有设置超时的套接字。但是,我在future.get()上设置了超时..如果socket永远保持打开状态,那么将来的超时是否会起作用并退出调用API的任务处理?

1 个答案:

答案 0 :(得分:2)

超时到期时Future.get会抛出TimeoutException

然而,除非你有办法打断它,否则基础任务将继续执行。例如,如果您可以访问套接字,或者通过API提供的任何机制,则可以关闭套接字。

您可以尝试中断执行,但是由代码来捕获中断(通过Thread.interrupted()),因此根据底层任务实现它可能没有效果:

try {
    Future<R> future = // ... 
} catch (TimeoutException e) {
    // ...
    future.cancel(true); // try to interrupt
}