-1

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

4

2 回答 2

2

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

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);
于 2012-08-07T19:00:15.593 回答
1

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

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

如果不了解更多关于处理涉及的内容,则无法给出具体的建议。

于 2012-08-07T18:22:03.253 回答