为每个循环生成一个线程,用于文件数组的每个循环

时间:2012-08-07 18:16:40

标签: java multithreading

我有一个文件数组的每个循环。对于每个文件,执行某些常见的操作。有很多这样的文件需要处理并且耗时。我在想是否java线程可以帮助我实现更高的性能。我是java线程编程的新手。需要任何帮助

2 个答案:

答案 0 :(得分:2)

假设FileReader类包含处理单个文件的逻辑

public class FileReader implements Runnable {

String fileName;

public FileReader(String fileName) {
   this.fileName = fileName;
}

public void run() {

 processFile(fileName);

}

private void processFile(String fileName) {
  // Your logic of processing the file.
}

}

然后添加以下代码来处理目录中的文件

您应该始终使用线程池来确保优雅地使用系统资源

private static final int THREAD_COUNT = 10;
private static final ThreadPoolExecutor pool = new ThreadPoolExecutor(
        THREAD_COUNT, THREAD_COUNT, 10, TimeUnit.SECONDS,
        new LinkedBlockingQueue<Runnable>());

为您要处理的每个文件

  FileReader reader = new FileReader(file.getAbsolutePath());
  pool.execute(reader);

答案 1 :(得分:1)

这实际上取决于你要为每个文件做些什么,以及处理瓶颈在哪里。如果您的处理是CPU限制的(您必须对从文件读取的数据进行大量计算),那么创建更多线程然后您有CPU核心来运行它们对您没有帮助。

另一方面,如果您的处理恰好是“将文件数据提交给服务器,等待响应”,并且同时提交请求不会减慢服务器速度,每个文件的线程可能会有所帮助。

在不了解处理涉及的内容的情况下,并没有真正具体的建议。