Параллельный поток java позволяет избежать накладных расходов

#java #spring #parallel-processing

Вопрос:

Предположим, у меня есть список, который я хочу перебирать параллельно, только когда список больше N. Это потому, что это, вероятно, увеличит накладные расходы на параллельное выполнение задач, поэтому я хочу ограничить его определенным числом. Существует ли конфигурация параллельного потока java, которая позволяет мне это сделать?

Конечно, я могу сделать оператор if, проверяющий размер. Но было бы круче, если бы я мог его где-нибудь настроить.

Комментарии:

1. Вы можете создать пользовательский разделитель, который разделяется только тогда, когда estimateSize() gt; N .

Ответ №1:

Создание разных потоков в зависимости от размера звучит не так уж плохо. Создайте вспомогательную функцию, и она станет почти прозрачной:

 public static lt;Tgt; Streamlt;Tgt; selectStream(final Collectionlt;Tgt; coll) {  return coll.size() gt; 10000  ? coll.parallelStream()  : coll.stream(); }  selectStream(yourCollection).map(x -gt; x).collect(toList());