2015-05-19 33 views
1

在Apache HttpClient的官方示例中,沒有提及釋放請求或響應對象。它們是作爲httpclient.close()的一部分發布還是releaseResources方法需要被某些東西覆蓋?Apache HttpClient官方示例 - 下載資源方法

final CountDownLatch latch2 = new CountDownLatch(1); 
final HttpGet request3 = new HttpGet("http://www.apache.org/"); 
HttpAsyncRequestProducer producer3 = HttpAsyncMethods.create(request3); 
AsyncCharConsumer<HttpResponse> consumer3 = new AsyncCharConsumer<HttpResponse>() { 

    HttpResponse response; 

    @Override 
    protected void onResponseReceived(final HttpResponse response) { 
     this.response = response; 
    } 

    @Override 
    protected void onCharReceived(final CharBuffer buf, final IOControl ioctrl) throws IOException { 
     // Do something useful 
    } 

    @Override 
    protected void releaseResources() { 
    } 

    @Override 
    protected HttpResponse buildResult(final HttpContext context) { 
     return this.response; 
    } 

}; 
httpclient.execute(producer3, consumer3, new FutureCallback<HttpResponse>() { 

    public void completed(final HttpResponse response3) { 
     latch2.countDown(); 
     System.out.println(request2.getRequestLine() + "->" + response3.getStatusLine()); 
    } 

    public void failed(final Exception ex) { 
     latch2.countDown(); 
     System.out.println(request2.getRequestLine() + "->" + ex); 
    } 

    public void cancelled() { 
     latch2.countDown(); 
     System.out.println(request2.getRequestLine() + " cancelled"); 
    } 

}); 
latch2.await(); 

} finally { 
    httpclient.close(); 
} 

回答

0

一個需要重寫#releaseResources()只有當消費者利用系統資源,如文件,管道等。如果響應內容在內存中始終認爲它得到GCed的正常方式。

+0

感謝您的解釋奧列格! – user3575337

相關問題