2015-08-23 2 views
0

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

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

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

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

+2

В чем проблема при выполнении этого последовательно, в одном потоке? Начните делать это сначала. Существует большая вероятность, что он будет достаточно быстрым или даже быстрее, чем многопоточное решение, учитывая, что основным узким местом является диск IO, а многопоточность не улучшит его. –

ответ

1

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

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

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

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

Смежные вопросы