Есть ряд вопросов, которые вы должны задать себе, чтобы найти правильный ответ:
Если бы у меня было столько потоков, сколько число ядер моего процессора, этого было бы достаточно?
Использование parallelStream()
даст вам столько же потоков, сколько и ядра вашего процессора.
Будет ли параллелизация цикла повышать производительность или есть узкое место в БД?
Вы можете раскрутить 100 потоков, параллельно обрабатывая их, но это не значит, что вы будете делать вещи в 100 раз быстрее, если ваша БД или сеть не смогут обработать том.Блокировка БД также может быть проблемой здесь.
Нужно ли обрабатывать мои данные в определенном порядке?
Если вам нужно обрабатывать данные в определенном порядке, это может ограничить ваш выбор.Например, forEach()
не гарантирует, что элементы вашей коллекции будут обрабатываться в определенном порядке, но forEachOrdered()
(с затратами на производительность).
Может ли мой источник данных извлекать данныереактивно?
Бывают случаи, когда наш источник данных может предоставлять данные в виде потока.В этом случае вы всегда можете обработать этот поток, используя такие технологии, как RxJava
или WebFlux
.Это позволит вам по-другому подходить к вашей проблеме.
Сказав все вышесказанное, вы можете выбрать подход, который вам нужен (исполнители, RxJava и т. Д.), Который лучше соответствует вашим целям.