从每个文件数组的循环中为每个循环产生一个线程

从每个文件数组的循环中为每个循环产生一个线程

问题描述:

我对每个文件数组的循环都有一个线程。对于每个文件都有一些常见的操作。有很多这样的文件需要处理并且耗时。我在想如果Java线程可以帮助我实现更高的性能。我是java线程编程的新手。需要任何帮助从每个文件数组的循环中为每个循环产生一个线程

+0

你做了什么研究?你有什么尝试?你读过什么文件? – Gray 2012-08-07 18:19:20

+0

@gray我从我的手机问这个问题。我没有我试过的代码。我会尽可能更新问题。我已阅读由oracle和一些网站提供的教程。 – VamsiKrishna 2012-08-07 18:22:43

假设的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); 
+0

这回答我的问题。谢谢。我将执行此操作并发布工作代码 – VamsiKrishna 2012-08-08 06:16:26

这实际上取决于您必须为每个文件做什么,以及处理的瓶颈所在。如果你正在处理CPU限制(你必须对从文件读取的数据进行大量计算),然后创建更多的线程,然后你有CPU内核来运行它们不会帮助你。另一方面,如果您的处理恰好是“将文件数据提交给服务器,等待响应”并且同时提交您的请求不会降低服务器速度,那么为每个文件设置一个线程可能会有所帮助。

不知道更多关于什么处理涉及没有一个真正的具体建议,可以给。

+0

对文件的操作是文件读写操作。它读取文件编辑文件并将其保存。 – VamsiKrishna 2012-08-07 18:26:03

+0

我会建议做一些测试,找出可以同时运行多少个线程,然后管理所有线程的额外开销最终会放慢你的速度,然后parall处理速度加快。 @byter建议的ThreadPoolExecutor类将是限制程序使用的线程数的好方法。 – 2012-08-07 19:27:57

+0

@Joethanks您的输入。雅线程池是我正在寻找.. – VamsiKrishna 2012-08-08 06:17:55