【问题标题】:What is HttpRequestBase#releaseConnection used to in apach httpclient-4.5.x什么是 HttpRequestBase#releaseConnection 用于 Apache httpclient-4.5.x
【发布时间】:2020-02-24 14:44:49
【问题描述】:

正如我们从httpclient-4.5.x quick start 中看到的,“为了确保系统资源的正确释放,用户必须从 finally 子句中调用 CloseableHttpResponse#close()。”

但是,让我们检查一下 HttpRequestBase#releaseConnection() 的代码。注释说“一种简化从 HttpClient 3.1 API 迁移的便捷方法。此方法等效于 {@link #reset()}。”

public abstract class HttpRequestBase extends AbstractExecutionAwareRequest
    implements HttpUriRequest, Configurable {
......
/**
     * A convenience method to simplify migration from HttpClient 3.1 API. This method is
     * equivalent to {@link #reset()}.
     *
     * @since 4.2
     */
    public void releaseConnection() {
        reset();
    }

....
}

我想问一下,既然我们只需要在 finally 子句中调用 CloseableHttpResponse#close() 来释放资源,那么 HttpRequestBase#releaseConnection() 是用来做什么的呢? AbstractExecutionAwareRequest#reset() 用于什么?我们什么时候应该使用 HttpRequestBase#releaseConnection() 或 AbstractExecutionAwareRequest#reset()。

【问题讨论】:

  • 这里有同样的问题。 here有人说这是一种释放连接的方法,但我认为根据文档不是这样。

标签: java httpclient


【解决方案1】:

我已经跟踪了 HttpRequestBase#releaseConnection() 和 CloseableHttpResponse#close() 的来源,这两个方法都会调用 HttpClientConnectionManager#releaseConnection()。所以我认为他们都可以用来释放连接。但是既然官方文档推荐我们使用CloseableHttpResponse#close(),我们最好还是CloseableHttpResponse#close()来释放连接。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-10
    • 2011-03-01
    • 2011-07-09
    • 2017-02-16
    相关资源
    最近更新 更多