Поток Java отнимает больше времени при увеличении ввода

Я написал программу на 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 () увеличивается, производительность снижается. В чем может быть причина?? Как побороть то же самое.

Здесь files - это массив имен файлов, которые нужно обработать, заполнение этого массива занимает менее 10 секунд.

ProcessInThreads - это класс, который реализует интерфейс Runnable. если цикл выполняется для 500 файлов, будет создан 500 экземпляров ProcessInThreads. Как я могу убить / освободить экземпляр после каждого выполнения?

1 ответ

Вы используете пул потоков фиксированного размера, он будет одновременно запускать только 8 потоков. Если вы добавите больше входных файлов, вы должны ожидать, что для их просмотра потребуется больше времени.

Тем не менее, не ожидайте гораздо лучшей производительности, создавая больше потоков для решения проблемы. Это зависит от многих других факторов, таких как характер прочитанного файла и т. Д.

Другие вопросы по тегам