Встречается на собеседованиях • сегодня

Как работает ForkJoinPool

ForkJoinPool — это реализация ExecutorService, оптимизированная для рекурсивного разделения задач (fork) и их последующего объединения (join). Основан на алгоритме work-stealing: свободные потоки "крадут" задачи у занятых. **Ключевые особенности:** - Работает с `ForkJoinTask` (обычно через `RecursiveTask` для возврата значений или `RecursiveAction` для void-операций). - Рекурсивно делит большие задачи на подзадачи (`fork()`), затем объединяет результаты (`join()`). - Эффективен для задач с высокой степенью параллелизма (например, обработка деревьев, сортировка слиянием). **Пример:** ```java class SumTask extends RecursiveTask { private final long[] array; private final int start, end; SumTask(long[] array, int start, int end) { this.array = array; this.start = start; this.end = end; } @Override protected Long compute() { if (end - start <= 1000) { // База рекурсии long sum = 0; for (int i = start; i < end; i++) sum += array[i]; return sum; } else { int mid = (start + end) >>> 1; SumTask left = new SumTask(array, start, mid); SumTask right = new SumTask(array, mid, end); left.fork(); // Асинхронный запуск подзадачи return right.compute() + left.join(); // Объединение результатов } } } // Использование: ForkJoinPool pool = new ForkJoinPool(); long result = pool.invoke(new SumTask(array, 0, array.length)); ``` **Важно:** Избегайте блокирующих операций в задачах — это снижает производительность.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы