对CloseableHttpClient使用try-with-resource块是否也会关闭返回的CloseableHttpResponse?

时间:2018-04-09 04:06:01

标签: java apache-httpclient-4.x try-with-resources

如果try-with-resource仅关闭CloseableHttpClient,我也会尝试锻炼,或者也会关闭响应。

例如,

private static CloseableHttpResponse sendRequest()
        throws IOException
{
    final HttpUriRequest httpUriRequest =
            buildRequest(url, requestMethod, requestParameters, httpHeaders);

    try (CloseableHttpClient client = HttpClientBuilder.create().build())
    {
        return client.execute(httpUriRequest);
    }
}

我们都知道这会按预期关闭CloseableHttpClient。那个电话的结果怎么样? CloseableHttpClient会返回CloseableHttpResponse。是否还需要在调用代码或其他地方关闭它?或者它与CloseableHttpClient的{​​{1}}同时关闭?

奖金问题:我如何向自己证明事情实际上已被关闭?我正在查看IntelliJ中的线程池,但是在事情结束时无法进行锻炼。

2 个答案:

答案 0 :(得分:2)

try-with-resource将仅关闭try子句中声明的资源

try (CloseableHttpClient client = HttpClientBuilder.create().build())

例如,它只会关闭变量" client"

此外,如果要关闭响应,提取数据将成为一个问题,因此关闭它的责任应落在其他地方。

答案 1 :(得分:2)

Jhilton给出的答案是完全正确的(我的+1)。但是,就HttpClient特定资源管理而言,关闭HttpClient实例会导致所有保持活动和活动连接的关闭,包括当前与HttpResponse实例关联的连接。这实际上意味着如果关闭用于执行消息交换的HttpResponse实例,则不必关闭HttpClient实例,但是非常不鼓励这样的模式。