Когда параллельные потоки объединяются вместе java 8? - PullRequest
0 голосов
/ 26 марта 2020

У меня есть сомнения, когда все потоки объединяются для получения результата? Если у меня есть класс сотрудников и мне нужно получить топ-5 идентификаторов сотрудников с максимальной зарплатой, я могу использовать параллельный поток, но как он работает внутри?

Ниже приведен код. Как это работает внутри? По моему мнению, очевидно, что параллельные потоки создаются в listA.parallelStream() на этот раз, но когда объединяются вместе?

List<Employee> listA =  new ArrayList<Employee>();
listA.parallelStream()
     .sorted(((e1,e2) -> e2.salary.compareTo(e1.salary)))
     .filter(e1 -> e1.salary > 50000)
     .limit(5)
     .map(e -> e.eID)
     .collect(Collectors.toList());

1 Ответ

0 голосов
/ 26 марта 2020

Параллельный или последовательный является свойством «полного» потока, а не его частью. Таким образом, вся цепочка вычислений (конвейер) выполняется параллельно от источника, который разделен до соответствующей степени (обычно число потоков по умолчанию в пуле разветвления / объединения), до операции терминала (сбор / возобновление) это спорный момент, когда все собрано из параллельной цепочки. Таким образом, когда данные запрашиваются у источника, и они создаются, эти данные вводятся в конвейер, управляемый выделенным потоком (между потоками нет «перемещения данных»).

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

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