Java 调用方线程被取消时HttpClient的行为

Java 调用方线程被取消时HttpClient的行为,java,multithreading,concurrency,httpclient,threadpool,Java,Multithreading,Concurrency,Httpclient,Threadpool,我们有一个可调用的类,它实际上通过HttpClient.executeMethod(GetMethod)和许多其他预计算来进行HttpCalls。HttpClient在构造函数中用多线程HttpConnectionManager初始化 另一个class B通过ExecutorService为class A创建线程列表,并将任务提交到池中,并期望将来返回对象。我们在B类中有以下逻辑: for( Future f : futures ){ try{ String str = f.get(timeOu

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

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

for( Future f : futures ){
try{
String str = f.get(timeOut, TimeUnit.SECONDS);
}catch(TimeoutException te){
f.cancel(true);
}
}
这样,我们的线程在指定的时间后被终止,任务的执行将被终止,该线程将可用于下一个任务

我想确认以下几点:

  • 若通过HttpClient建立外部连接,那个么在线程的future.cancel上如何处理该连接
  • 在上述情况下或一般情况下,http连接池是否通过正确释放前一个连接来恢复连接?我们最终释放了连接,但我不认为中断线程会影响到这一块
  • 它是否会导致客户端出现任何泄漏或服务器上的额外资源消耗
  • 谢谢

    视情况而定

    • 如果
      Http客户机
      使用
      java.net.Socket,
      其I/O是不可中断的,因此取消将无效

    • 如果它使用NIO,中断将关闭通道并导致异常。在服务器上,这将导致流过早结束或写入异常,服务器应正确处理这两种情况


    关于1),另请参见和a(使用连接超时,或使用)关于2?http连接是否返回到池中,以便在适当释放后重新使用?