【问题标题】:Java downloader - downloading multiple filesJava 下载器 - 下载多个文件
【发布时间】:2016-01-16 11:31:35
【问题描述】:

我创建了一个可以使用 URL 下载一个文件的 Java 程序,但是现在我希望它使用多个线程下载多个文件。我可以使用相同的方法并遍历 URL 列表来获取文件吗?或者有人可以推荐一种方法吗?

【问题讨论】:

  • 您能否发布代码的相关部分,以便我们看看它是否可以以多线程方式使用?
  • 你的问题太宽泛了。发布一些你已经拥有的代码,并显示你到底卡在哪里。没有人会为你写,你能得到的只是建议,而且只有你提供足够的信息。

标签: java multithreading arraylist download


【解决方案1】:

你可以这样使用:

void download(URL url){
    ...
}

void downloadAll(URL[] urls){
    for(URL url : urls){
        Thread t = new Thread(() -> download(url));
        t.start();
    }
}

编辑:
作为@LouisF。提到解决此问题的推荐方法是Executors。因此,与使用 Threads 的简单示例不同,这将是更合适但也更复杂的方法:

ExecutorService service = Executors.newChachedThreadPool();
for(URL url : urls)
    service.submit(() -> download(url);

【讨论】:

  • 我不完全明白你的意思,抱歉,它正在创建线程,它还在做其他事情吗?
  • @b.d 这个想法是将下载文件的例程简单地包装到一个单独的方法中,该方法只需要最基本的参数并从线程中启动该方法。我把下载程序本身留给了你。其余的只是解决这种并行执行问题的最常用方法。
  • 一个不应该直接使用线程,而是更多的执行器和任务。您可以参考有效Java(第2版)的第68条和此链接baptiste-wicht.com/posts/2010/09/…例如
  • @LouisF。我只是使用该代码,因为 OP 明确要求使用 Threads 的解决方案。就我个人而言,我也更喜欢为此目的使用 Executors。我将编辑答案以添加这一点。
  • 我猜 OP 正在寻找有关如何多线程一段代码的指导!这就是为什么我认为这个回应是不恰当的
猜你喜欢
  • 2018-08-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多