2016-01-16 168 views
0

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

+0

你能发布您的代码的相关部分,所以我们可以看到,如果它可以用在多线程的方式? – SaschaM78

+0

你的问题太广泛了。发布一些你已经拥有的代码,并显示你到底在哪里卡住。没有人会为你写信,只有你提供了足够的信息,你才能得到建议。 –

回答

0

你可以使用这样的事情:

void download(URL url){ 
    ... 
} 

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

编辑:
作为@LouisF。提到解决此问题的推荐方法是Executors。因此,而不是使用Thread S中的简单的例子,这将是更合适的,但藏汉复杂一点的办法:

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

我不完全理解你的意思,抱歉,它正在创建线程,它还在做其他事情吗? –

+0

@ b.d这个想法是简单地将用于下载文件的例程打包到一个单独的方法中,该方法只需要最基本的参数并从线程内启动该方法。我已经将下载程序本身留给了你。其余的只是解决这种并行执行问题的最常见的方式。 – Paul

+0

不应该直接使用线程,而应该使用更多的执行程序和任务。您可以参考有效Java(第2版)的第68项和此链接http://baptiste-wicht.com/posts/2010/09/java-concurrency-part-7-executors-and-thread-pools.html示例 –