Apache HttpClient官方示例 - 释放资源方法

时间:2015-05-19 14:03:06

标签: apache httpclient apache-httpclient-4.x http-get

在这个Apache HttpClient的官方示例中,没有提到释放请求或响应对象。它们是作为httpclient.close()或releaseResources方法的一部分发布的,需要用某些东西覆盖吗?

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();
}

1 个答案:

答案 0 :(得分:0)

只有当使用者使用系统资源(如文件,管道等)时才需要覆盖#releaseResources()。如果响应内容始终保存在内存中,则会以正常方式获取GC。