Executors.newFixedThreadPool - 问题

时间:2015-01-07 02:53:54

标签: java multithreading java.util.concurrent

我使用了CopyOnWriteArrayList集合对象,该对象包含1000个URL。每个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));
    }

这次点击同一个网址4次。可能做错了什么。你能告诉我哪里出错吗?

我的要求是一次挑选4个网址(线程)并开始并行下载,直到列表中的所有网址完成下载。

感谢。

1 个答案:

答案 0 :(得分:4)

我不知道StringTask是什么,但您似乎正在将完整的网址列表传递给它。进行适当的更改,只从列表中提交一个网址

pool.submit(new StringTask(fileList.get(i)));

(或者使用fileList上的迭代器,以CopyOnWriteArrayList为准。

for (String url : fileList){
    pool.submit(new StringTask(url));
}