Executors.newFixedThreadPool - 问题

Executors.newFixedThreadPool - issue

我使用了包含 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 URLs(线程)并开始并行下载它们,直到列表中的所有 URLs 完成下载。

谢谢。

我不知道 StringTask 是什么,但您似乎将 URL 的完整列表传递给它。进行适当的更改以仅提交列表

中的单个 URL
pool.submit(new StringTask(fileList.get(i)));

(或在 fileList 上使用迭代器,以更适合 CopyOnWriteArrayList 为准。)

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