java未来超时和IO超时 2 周,4 日 Questions & Answers 94 我有多个线程调用一个API。API打开一个未设置超时的socket。不过,我已将超时设置为“未来”。获取()。。如果socket永远保持打开状态,future的超时是否会起作用,并退出调用API的任务处理
# 1 楼答案 超时过期时,Future.get将抛出一个TimeoutException 然而,底层任务将继续执行,除非您有办法中断它。例如,可以通过关闭套接字(如果您有权访问它)或通过API提供的任何机制来实现 您可以尝试中断执行,但由代码捕获中断(通过Thread.interrupted()),因此根据底层任务实现,中断可能没有效果: try { Future<R> future = // ... } catch (TimeoutException e) { // ... future.cancel(true); // try to interrupt }
# 1 楼答案
超时过期时,
Future.get
将抛出一个TimeoutException
然而,底层任务将继续执行,除非您有办法中断它。例如,可以通过关闭套接字(如果您有权访问它)或通过API提供的任何机制来实现
您可以尝试中断执行,但由代码捕获中断(通过
Thread.interrupted()
),因此根据底层任务实现,中断可能没有效果: