0

現在、Apache HttpComponents を使用して Web サイトからソース コードをダウンロードするプログラムを実行しています。私はたくさん(10,000秒)ダウンロードするので、これを行うために複数のスレッドを使用しています。

すべてのスレッドが死ぬ (結合する) 場合もあれば、そうでない場合もあります。デバッグを通じて、行が

CloseableHttpResponse response = httpClient.execute(httpget,context);

が問題です。この行のタイムアウトを設定する方法、またはこの行がスレッドの実行をブロックしている理由を知っている人はいますか?

4

2 に答える 2

0

コードのHttpConnectionParamsで次のタイムアウト設定を使用します(コンストラクターHttpParamsに渡されますHttpClient)。

org.apache.http.params.HttpConnectionParams.setConnectionTimeout(HttpParams, int)
org.apache.http.params.HttpConnectionParams.setSoTimeout(HttpParams, int)

複数のスレッドで同じホストに接続しているときに発見した問題で、maxPerRoute設定がスレッド数よりも小さい場合にブロッキング/タイムアウトが発生します。PoolingClientConnectionManagerを見てください:

org.apache.http.impl.conn.PoolingClientConnectionManager.setDefaultMaxPerRoute(int)
于 2013-10-12T15:58:01.263 に答える