2014-02-27 331 views
0

我試圖使用Apache HttpComponents library下載許多文件。Httpclient需要很長時間

使用相同的HttpClient單獨下載文件。

但我只得到第一個。當我使用調試器,程序保持封鎖該指令

HttpResponse response = httpClient.execute(httpGet); 

我使用的ExecutorService你下載過上獨立的線程文件:

ExecutorService pool = Executors.newSingleThreadExecutor(); 
    pool.submit(new FileDownloader(httpClient,URL1)); 
    pool.submit(new FileDownloader(httpClient,URL2)); 
    pool.shutdown(); 
    pool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS); 

編輯

它適用於我使用單獨的httpClient。

有什麼想法?

+1

粘貼更多代碼和GET的URL –

+0

首先猜測數據太少:阻塞I/O。也許你需要爲每個申請創建一個線索 –

+0

我更新了我的帖子。 – javacurve

回答

0

這是由於我的公司的代理問題。它不允許在同一時間超過2個打開的連接。 所以爲了避免這個問題,不要忘記在每次請求後關閉HttpResponse。

0

您提供的信息相當稀少。我猜你正在使用Apache HttpComponents library。在這種情況下,當使用來自多個線程的HttpClient時,您將需要使用線程安全的連接池管理器。

例如:PoolingHttpClientConnectionManager

爲一個例子見this tutorial

+0

是的我正在使用Apache HttpComponents庫。 我不認爲這是線程問題,因爲我使用SingleThreadExecutor來運行我的線程。我將編輯我的帖子以提供更多信息 – javacurve

+0

我試圖下載同一個線程和同一問題中的所有文件。 – javacurve