首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Executors.newFixedThreadPool -发行

Executors.newFixedThreadPool -发行
EN

Stack Overflow用户
提问于 2015-01-07 02:53:53
回答 1查看 200关注 0票数 0

我使用了包含1000个URL的CopyOnWriteArrayList集合对象。每个URL表示一个文件。

我想使用多线程池机制并行下载这些URL文件。

尝试使用以下代码:

代码语言:javascript
运行
复制
    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都完成下载。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-07 02:56:51

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

代码语言:javascript
运行
复制
pool.submit(new StringTask(fileList.get(i)));

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

代码语言:javascript
运行
复制
for (String url : fileList){
    pool.submit(new StringTask(url));
}
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27810765

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档