Обработка 1 записи из списка записей только один раз с использованием многопоточности - PullRequest
0 голосов
/ 06 сентября 2018

У меня есть список, который содержит X количество записей. Я хочу обработать эти записи, используя несколько потоков. В настоящее время я вынимаю записи и отправляю на исполнение Когда я напечатал threadId и имя записи, я вижу, что несколько потоков пытаются выполнить логику для одной и той же записи, что не должно быть. Как я могу ограничить это?

1 Ответ

0 голосов
/ 06 сентября 2018

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

Кстати, если вы не знаете, являются ли записи уникальными, вы можете использовать Steam.distinct ().

List<Result> results = list.stream()
                           .distinct()
                           .parallel()
                           .peek(r -> System.out.println(
                                               Thread.currentThread() + " processes " + r);
                           .map(r -> processRecord(r))
                           .collect(Collectors.toList());

Потоки часто являются более простым способом обработки записей в коллекции в нескольких потоках.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...