java - future 超时和IO超时

标签 java multithreading

我有多个线程调用 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/

相关文章:

java - 使用 JCIFS 从 IP 获取主机名

java - 如果上一个任务未完成,如何不启动 ScheduledExecutorService 任务

c++ - 如果 mutex::lock() 已被另一个线程锁定,则多久检查一次解锁状态?

java - 无法加载实体元数据

java - 在 Java 语言的许多元素的集合中找到最小的 e1-e2

java - ArrayList 可以在多线程环境中用于只读目的吗?

c# - 任务并行库WaitAll异常处理

objective-c - 多线程和自动释放池

java - 如何将面向对象的结构映射到表单字段?

java - Android 虚拟设备配置错误?