簡體   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