【问题标题】:Httpclient take a very long timeHttpclient 需要很长时间
【发布时间】:2014-02-28 16:41:38
【问题描述】:

我正在尝试使用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 时它可以工作。

有什么想法吗?

【问题讨论】:

  • 粘贴更多代码,以及 GET 的 url
  • 数据这么少的第一个猜测:阻塞 I/O。也许您需要为每个请愿创建一个线程

标签: java httpclient


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    例如:PoolingHttpClientConnectionManager

    有关示例,请参阅 this tutorial

    【讨论】:

    • 是的,我正在使用 Apache HttpComponents 库。我不认为这是线程问题,因为我使用 SingleThreadExecutor 来运行我的线程。我将编辑我的帖子以提供更多信息
    • 我尝试在同一个线程中下载所有文件,同样的问题。
    猜你喜欢
    • 1970-01-01
    • 2013-09-07
    • 2020-08-26
    • 2014-10-09
    • 2012-11-26
    • 2019-12-27
    • 2017-10-22
    • 2020-11-15
    • 2016-05-19
    相关资源
    最近更新 更多