首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Java中使用Executor编写文件

在Java中使用Executor编写文件
EN

Stack Overflow用户
提问于 2013-04-11 03:30:05
回答 4查看 1.8K关注 0票数 1

我有一个List<Map<String,String>>的地图列表。每个Map都将File Name作为Key,将File Content作为Value

我在上面的列表中有超过25个Lakh地图。我的要求是遍历这个列表,并在读取每个Map键和值的输出文件夹中创建Files。所以在结束时,我将有25lakh文件。这需要4个多小时。然后我停止这个程序。我不知道确切的时间,如果我运行整个25lakh记录的程序。

我需要使用多线程来优化它。

我如何使用Java Executors/ Fork/ Join (我有Java 7)来优化它

EN

回答 4

Stack Overflow用户

发布于 2013-04-11 03:35:17

如果你在一张磁盘上写你的文件,我不认为添加更多的线程会有真正的帮助。您的程序是IO密集型的,而不是CPU密集型的。

票数 4
EN

Stack Overflow用户

发布于 2013-04-11 03:36:13

您可以使用一个ThreadPoolExecutor和一个实现Runnable的类。

代码语言:javascript
复制
public class Processor implements Runnable {
    private final Map<String, String> map;

    public Processor(Map<String, String> map) {
        this.map = map;
    }

    public void run() {
        // Do work here
    }
}

ThreadPoolExecutor executor = new ThreadPoolExecutor();
for(Map<String, String> map : list) {
    executor.execute(new Processor(map));
}
票数 0
EN

Stack Overflow用户

发布于 2013-04-11 03:37:40

并行化可以通过将问题分成与处理器可用一样多的子问题来实现。对于列表迭代器,您可以迭代子列表:

代码语言:javascript
复制
int nThreads = Runtime.getRuntime().availableProcessors() + 1;
ExecutorService exec = Executors.newFixedThreadPool( nThreads );
int interval = list.size()/parallel.nThreads;
int from     = 0;
for( int i = 0; i < nThreads; ++i ) {
   int to = ( i == nThreads - 1 ) ? 1000 : from + interval;
   exec.submit( new Search( from, to, list ));
   from = to;
}
exec.shutdown();
exec.awaitTermination( 1, TimeUnit.DAYS );

Search用于完成这项工作(创建文件)。

Search类示例:

代码语言:javascript
复制
class Search implements Runnable {

  final int from;
  final int to;
  final List< Map< String, String >> list;

  Search( int from, int to, List< Map< String, String >> list ) {
     this.from = from;
     this.to   = to;
     this.list = list;
  }

  @Override
  public void run(){
     for( int b = from; b < to; ++b ) {
        Map< String, String > map = list.get(b);
        ...
     }
  }
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15934727

复制
相关文章

相似问题

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