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);
}
}
这样,我们的线程在指定的时间后被终止,任务的执行将被终止,该线程将可用于下一个任务
我想确认以下几点:
- 如果
使用Http客户机
其I/O是不可中断的,因此取消将无效java.net.Socket,
- 如果它使用NIO,中断将关闭通道并导致异常。在服务器上,这将导致流过早结束或写入异常,服务器应正确处理这两种情况