从每个文件数组的循环中为每个循环产生一个线程
我对每个文件数组的循环都有一个线程。对于每个文件都有一些常见的操作。有很多这样的文件需要处理并且耗时。我在想如果Java线程可以帮助我实现更高的性能。我是java线程编程的新手。需要任何帮助从每个文件数组的循环中为每个循环产生一个线程
假设的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);
这回答我的问题。谢谢。我将执行此操作并发布工作代码 – VamsiKrishna 2012-08-08 06:16:26
这实际上取决于您必须为每个文件做什么,以及处理的瓶颈所在。如果你正在处理CPU限制(你必须对从文件读取的数据进行大量计算),然后创建更多的线程,然后你有CPU内核来运行它们不会帮助你。另一方面,如果您的处理恰好是“将文件数据提交给服务器,等待响应”并且同时提交您的请求不会降低服务器速度,那么为每个文件设置一个线程可能会有所帮助。
不知道更多关于什么处理涉及没有一个真正的具体建议,可以给。
对文件的操作是文件读写操作。它读取文件编辑文件并将其保存。 – VamsiKrishna 2012-08-07 18:26:03
我会建议做一些测试,找出可以同时运行多少个线程,然后管理所有线程的额外开销最终会放慢你的速度,然后parall处理速度加快。 @byter建议的ThreadPoolExecutor类将是限制程序使用的线程数的好方法。 – 2012-08-07 19:27:57
@Joethanks您的输入。雅线程池是我正在寻找.. – VamsiKrishna 2012-08-08 06:17:55
你做了什么研究?你有什么尝试?你读过什么文件? – Gray 2012-08-07 18:19:20
@gray我从我的手机问这个问题。我没有我试过的代码。我会尽可能更新问题。我已阅读由oracle和一些网站提供的教程。 – VamsiKrishna 2012-08-07 18:22:43