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