Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 未来超时和IO超时_Java_Multithreading - Fatal编程技术网

Java 未来超时和IO超时

Java 未来超时和IO超时,java,multithreading,Java,Multithreading,我有多个线程调用一个API。API打开一个未设置超时的套接字。但是,我在future.get()上设置了超时。如果套接字永远保持打开状态,future的超时是否会起作用并退出调用API的任务处理?future.get将在超时过期时抛出一个TimeoutException 然而,底层任务将继续执行,除非您有办法中断它。例如,可以通过关闭套接字(如果您有权访问它)或通过API提供的任何机制来实现 您可以尝试中断执行,但由代码捕获中断(通过Thread.interrupted()),因此根据底层任务实

我有多个线程调用一个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
}
试试看{
未来=/。。。
}捕获(超时异常e){
// ...
future.cancel(true);//尝试中断
}

当Future抛出TimeoutException时,线程是否停止?或者它只是等待底层任务完成?此外,future方面或任何其他方面(除了您已经提到的以外)是否有任何机制可以中断底层IO操作?没有,因为任务有责任知道在中断时该做什么。或在必要时提供中断机制。否则,它可能会产生不良的副作用。所以,若底层任务并没有中断,线程将永远挂起?若你们并没有办法中断它,是的。您可以使用
while(true)
loop等简单示例进行测试感谢您的响应Jean!:-)