java - 使用 PoolingClientConnectionManager 时释放连接?

标签 java multithreading connection-pooling apache-httpclient-4.x connection-leaks

我正在使用 Apache DefaultHttpClientPoolingClientConnectionManagerBasicResponseHandler 。这些在不同线程之间共享,每个线程创建自己的 HttpRequestBase 扩展。

使用 BasicResponseHandlers 时,我是否需要手动告诉经理我已完成连接使用?我是否需要将其包装在finally中,这样异常就不会导致连接泄漏?

换句话说,我需要这样做吗

HttpGet get = new HttpGet(address);
try {
  httpclient.execute(get, new BasicResponseHandler());
} finally {
  get.reset();
}

或者这样就足够了吗?

HttpGet get = new HttpGet(address);
httpclient.execute(get, new BasicResponseHandler());

我在 Apache documentation. 中没有看到明确的答案

最佳答案

这已经足够了,值得推荐。

HttpClient#execute 方法保证在出现异常(I/O 或运行时)时自动释放与请求关联的所有资源。当使用 ResponseHandler 处理 HTTP 响应时,所有情况下底层连接都会自动释放回连接管理器。

关于java - 使用 PoolingClientConnectionManager 时释放连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13728948/

相关文章:

java - Apache AsyncHttpClient 4.1.4 创建新的套接字连接而不是重用来自连接池的连接

java - 如何使用 Lucene 构建我自己的 "common word"过滤器

java - 在子类中调用 super.equals 和 super.hashCode?

java - 在 2 个不同的线程中写入和读取 ArrayList

multithreading - PyQt4 中的线程

java - 是否有关于如何使用 Java ObjectPool/池的任何好的教程或示例?

java - 测试字符串是否是字符串列表中任何字符串的子字符串的有效方法

java - Java 中二维数组的替代方案

c++ - 使用 openMP 的并行程序

java - Glassfish、PostgreSQL 和关闭的连接