#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());