Как обработать много файлов по многопоточности в Java

Теперь у меня есть множество JSON-файлов на локальном компьютере, мне нужно прочитать эти файлы и перенести их в JSONObject, а затем выполнить некоторые бизнес-логические задачи, такие как выяснить дочерний узел, затем вернуть, посчитать какое-то специальное значение, а затем вернуть.

Как единственный файл, я закончил код чтения файла JSON -> перенести его в JSONObject-> выполнить поиск дочернего узла / считать какое-то специальное значение.

Но если, когда было много файлов JSON, как я могу сделать эту работу? Я считаю, что многопоточность могла бы решить мою проблему, но как я могу собрать результаты каждого потока и, наконец, получить один результат?

Кстати, если мне нужно создать пул потоков и как?

1 ответ

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

List<Result> results= Files.list(path).parallel()
                           .map(p -> turnFileIntoJSONObject(p))
                           .map(json -> process(json))
                           .collect(Collectors.toList());

Это распределяет файлы, которые будут обрабатываться по вашим доступным процессорам, и собирает результаты в конце.

Вы также можете бросить .parallel() если это не быстрее для вас.

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