2

我正在使用带有PoolingClientConnectionManagerBasicResponseHandler的 Apache DefaultHttpClient。这些在不同的线程之间共享,每个线程创建自己的 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 文档中没有看到明确的答案。

4

1 回答 1

3

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

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

于 2012-12-05T19:59:14.437 回答