有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java未来超时和IO超时

我有多个线程调用一个API。API打开一个未设置超时的socket。不过,我已将超时设置为“未来”。获取()。。如果socket永远保持打开状态,future的超时是否会起作用,并退出调用API的任务处理


共 (1) 个答案

  1. # 1 楼答案

    超时过期时,Future.get将抛出一个TimeoutException

    然而,底层任务将继续执行,除非您有办法中断它。例如,可以通过关闭套接字(如果您有权访问它)或通过API提供的任何机制来实现

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

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