java - 什么是 HttpRequestBase#releaseConnection 用于 Apache httpclient-4.5.x
问题描述
正如我们从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()。
解决方案
我已经跟踪了 HttpRequestBase#releaseConnection() 和 CloseableHttpResponse#close() 的来源,这两种方法都会调用 HttpClientConnectionManager#releaseConnection()。所以我认为它们都可以用来释放连接。但是既然官方文档推荐我们使用CloseableHttpResponse#close(),我们最好还是用CloseableHttpResponse#close()来释放连接。
推荐阅读
- android - Android - 使用 ImageView scaleType = "centerCrop" accrording original Image 在视图上定义特定坐标 x 和 y
- mysql - 如何从 wordpress 表中获取 SQL 查询
- python - Django显示更改字段的值
- java - 应用重启后如何让服务继续工作
- spring-cloud - Spring Cloud 配置客户端未从配置服务器中选择值
- java - Java 中 HH:mm 或 HH:mm:ss 中逗号分隔时间的正则表达式,例如 12:00,13:03:21
- api - 如何在 API 商店 (WSO2) 中命名我的 API?是否有任何命名约定或最佳实践?
- python - 有没有简单的方法来使用 pyautogui?
- docker - 如何在 Docker 中监控环形缓冲区以进行非阻塞日志记录?
- java - 使用可折叠元素在网格中显示对象