当输入增加时,Java线程消耗更多时间

时间:2017-03-30 05:56:04

标签: java java-threads

我编写了一个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实例。如何在每次执行后杀死/释放实例?

1 个答案:

答案 0 :(得分:2)

您使用的是固定大小的线程池,它一次只能运行8个线程。如果你添加更多的输入文件,你应该花费更长的时间来完成所有这些文件。

话虽如此,不要期望通过在问题上投入更多线程来获得更好的性能。它取决于许多其他因素,如文件读取的性质等。