Java | Фишки и трюки
7.21K subscribers
182 photos
29 videos
6 files
40 links
Java: примеры кода, интересные фишки и полезные трюки

Купить рекламу: https://telega.in/c/java_tips_and_tricks

✍️По всем вопросам: @Pascal4eg
Download Telegram
⌨️ Параллельные и последовательные потоки (Stream)

Последовательные потоки (Sequential Streams)

✔️ Обрабатывают элементы последовательно, один за другим, на одном потоке, следовательно производительность ограничена возможностями одного ядра процессора.

✔️ Используют основной поток программы (main thread) для выполнения операций.

✔️ Метод stream() создаёт последовательный поток.

Пример последовательного потока:

List<String> list = List.of("Hello ", "w", "o", "r", "l", "d!");
list.stream().forEach(System.out::print);
// Hello world!


Параллельные потоки (Parallel Streams)

✔️ Обрабатывают элементы параллельно, распределяя их между несколькими потоками (threads), что позволяет использовать многопоточность.

✔️ Используют ForkJoinPool для распределения задач между потоками.

✔️ Эффективны для больших наборов данных, поскольку могут улучшить производительность на многоядерных процессорах.

✔️ Параллельный поток можно создать, вызвав метод parallelStream() или применив метод parallel() к уже существующему потоку.

Пример параллельного потока:

List<String> list = List.of("Hello ", "w", "o", "r", "l", "d!");
list.parallelStream().forEach(System.out::print);
// rlHello d!wo


#java #Stream #parallelStream
Please open Telegram to view this post
VIEW IN TELEGRAM
👍112🔥1😁1
Как избежать проблем с Parallel Stream?

Использование parallelStream() может замедлить программу, если не учитывать его особенности.

➡️ Проблемы:

🟢 Не стоит использовать с маленькими коллекциями – накладные расходы на потоки выше, чем выгода.
🟢 Будьте осторожны с изменяемыми переменными в forEach().

Ошибка: некорректное изменение общей переменной

int[] sum = {0};
list.parallelStream().forEach(i -> sum[0] += i); // Потенциальная ошибка!


📌 Решение: использовать reduce()

int sum = list.parallelStream().reduce(0, Integer::sum);


💡 Совет: parallelStream() эффективен, если объём данных большой и нет конкурентного доступа.

#java #parallelstream #performance
Please open Telegram to view this post
VIEW IN TELEGRAM
👍131