如果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中的线程池,但是在事情结束时无法进行锻炼。
答案 0 :(得分:2)
try-with-resource将仅关闭try子句中声明的资源
try (CloseableHttpClient client = HttpClientBuilder.create().build())
例如,它只会关闭变量" client"
此外,如果要关闭响应,提取数据将成为一个问题,因此关闭它的责任应落在其他地方。
答案 1 :(得分:2)
Jhilton给出的答案是完全正确的(我的+1)。但是,就HttpClient特定资源管理而言,关闭HttpClient
实例会导致所有保持活动和活动连接的关闭,包括当前与HttpResponse
实例关联的连接。这实际上意味着如果关闭用于执行消息交换的HttpResponse
实例,则不必关闭HttpClient
实例,但是非常不鼓励这样的模式。