我有多个线程调用API。 API打开一个没有设置超时的套接字。但是,我在future.get()上设置了超时..如果socket永远保持打开状态,那么将来的超时是否会起作用并退出调用API的任务处理?
答案 0 :(得分:2)
超时到期时Future.get
会抛出TimeoutException
。
然而,除非你有办法打断它,否则基础任务将继续执行。例如,如果您可以访问套接字,或者通过API提供的任何机制,则可以关闭套接字。
您可以尝试中断执行,但是由代码来捕获中断(通过Thread.interrupted()
),因此根据底层任务实现它可能没有效果:
try {
Future<R> future = // ...
} catch (TimeoutException e) {
// ...
future.cancel(true); // try to interrupt
}