Httpclient需要很长时间

时间:2014-02-27 10:55:12

标签: java httpclient

我正在尝试使用Apache HttpComponents library下载许多文件。

使用相同的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时,它可以正常工作。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您提供的信息相当稀少。我猜你正在使用Apache HttpComponents library。在这种情况下,当使用来自多个线程的HttpClient时,您将需要使用线程安全的连接池管理器。

例如:PoolingHttpClientConnectionManager

有关示例,请参阅this tutorial

答案 1 :(得分:0)

由于我公司的代理,这是一个问题。它不允许同时超过2个开放连接。 因此,为避免此问题,请不要忘记在每次请求后关闭HttpResponse。