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));
}
我使用了包含 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 的完整列表传递给它。进行适当的更改以仅提交列表
pool.submit(new StringTask(fileList.get(i)));
(或在 fileList
上使用迭代器,以更适合 CopyOnWriteArrayList
为准。)
for (String url : fileList){
pool.submit(new StringTask(url));
}