繁体   English   中英

取消调用方线程的HttpClient行为

[英]Behavior of HttpClient with caller thread being cancelled

我们有一个可调用的class A ,它实际上通过HttpClient.executeMethod(GetMethod)与许多其他预计算进行HttpCalls。 使用MultiThreadedHttpConnectionManager在构造函数中初始化HttpClient。

另一个class B通过ExecutorService为类A创建线程列表,并将任务提交给池,并期望将来返回对象。 B类中有以下逻辑:

for( Future f : futures ){
try{
String str = f.get(timeOut, TimeUnit.SECONDS);
}catch(TimeoutException te){
f.cancel(true);
}
}

这样,我们的线程将在指定时间后终止,并且该任务的执行将终止,并且该线程将可用于下一个任务。

我要确认以下几点:

  1. 如果通过HttpClient建立了外部连接,该线程的future.cancel如何处理?
  2. 在上述情况下或通常情况下,http连接池是否通过正确释放前一个连接池来恢复连接? 我们确实在最后释放了连接,但是我不认为中断线程会碰到那个块。
  3. 会导致客户端泄漏或服务器上的额外资源消耗吗?

谢谢!

这取决于。

  • 如果Http Client使用java.net.Socket,其I / O不会中断,因此取消将无效。

  • 如果使用NIO,则中断将关闭通道并导致异常。 在服务器上,这将导致流过早结束或写入异常,服务器应严格解决这两种情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM