使用PoolingClientConnectionManager时释放连接?

时间:2012-12-05 17:27:34

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

我正在使用带有DefaultHttpClientPoolingClientConnectionManager的Apache BasicResponseHandler。它们在不同的线程之间共享,每个线程都创建自己的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.

中没有看到明确的答案

1 个答案:

答案 0 :(得分:3)

这已足够,值得推荐。

保证

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