Встречается на собеседованиях • сегодня
Как работает 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));
```
**Важно:** Избегайте блокирующих операций в задачах — это снижает производительность.

Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
офферы быстрее!
Попробовать бесплатно
Следующий вопрос
Это единственный вопрос по вашему фильтру
как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы