我使用了包含1000个URL的CopyOnWriteArrayList集合对象。每个URL表示一个文件。
我想使用多线程池机制并行下载这些URL文件。
尝试使用以下代码:
CopyOnWriteArrayList<String> fileList = DataExtractor.getRefLinks();
ExecutorService threadPool = Executors.newFixedThreadPool(4);
CompletionService<String> pool = new ExecutorCompletionService<String>(
threadPool);
for (int i = 0; i < fileList.size() ; i++){
pool.submit(new StringTask(fileList));
}这是击中相同的URL 4次。可能做错了什么。你能告诉我哪里出了问题吗?
我的要求是一次选择4个URL(线程),并开始并行下载,直到列表中的所有URL都完成下载。
谢谢。
发布于 2015-01-07 02:56:51
我不知道StringTask是什么,但您似乎将URL的完整列表传递给它。进行适当的更改,只从列表中提交一个URL
pool.submit(new StringTask(fileList.get(i)));(或在fileList上使用迭代器,以更适合于CopyOnWriteArrayList。)
for (String url : fileList){
pool.submit(new StringTask(url));
}https://stackoverflow.com/questions/27810765
复制相似问题