我编写了一个Java程序来废弃大量日志文件。对于文件的并行处理,我使用的是线程概念。以下是相同的源代码。
ExecutorService threadPool = Executors.newFixedThreadPool(8);
for(int i=0; i < files.size(); i++)
{
threadPool.execute(new ProcessInThreads(i+"`"+files.get(i),fr) {
public void run()
{
long threadId = Thread.currentThread().getId();
Initiate(fr,threadId);
}
});
}
threadPool.shutdown();
当files.size()= 300时,程序在不到几分钟内完成执行,但是当files.size()增加时,性能会下降。可能是什么原因?如何克服同样的问题。
这里的文件是要处理的文件名数组,填充此数组的时间不到10秒。
ProcessInThreads是一个实现Runnable接口的类。如果循环运行500个文件,将创建500个ProcessInThreads实例。如何在每次执行后杀死/释放实例?
答案 0 :(得分:2)
您使用的是固定大小的线程池,它一次只能运行8个线程。如果你添加更多的输入文件,你应该花费更长的时间来完成所有这些文件。
话虽如此,不要期望通过在问题上投入更多线程来获得更好的性能。它取决于许多其他因素,如文件读取的性质等。