2

PoolingClientConnectionManagerBasicResponseHandlerでApache DefaultHttpClientを使用しています。これらは異なるスレッド間で共有され、各スレッドは独自の HttpRequestBase 拡張機能を作成します。

BasicResponseHandlers を使用する場合、接続の使用が終了したことをマネージャーに手動で伝える必要がありますか? 例外が接続リークを引き起こさないように、最終的にラップする必要がありますか?

つまり、これを行う必要がありますか

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 に答える