我有多个线程调用 API。 API 打开一个未设置超时的套接字。但是,我在 future.get() 上设置了超时。如果套接字永远保持打开状态,future 的超时是否会起作用并退出调用 API 的任务的处理?
最佳答案
Future.get
会抛出 TimeoutException
当超时到期时。
但是,底层任务将继续执行,除非您有办法中断它。例如,可以通过关闭套接字(如果您有权访问它)或通过 API 提供的任何机制来实现。
您可以尝试中断执行,但要由代码来捕获中断(通过 Thread.interrupted()
),因此它可能没有效果,具体取决于底层任务实现:
try {
Future<R> future = // ...
} catch (TimeoutException e) {
// ...
future.cancel(true); // try to interrupt
}
关于java - future 超时和IO超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31148295/