Встречается на собеседованиях • сегодня
В чем особенность ForkJoinPool
ForkJoinPool — это специализированный пул потоков, оптимизированный для рекурсивного разделения задач (fork) и их последующего объединения (join).
**Особенности:**
- Использует алгоритм work-stealing: свободные потоки «крадут» задачи у занятых, повышая эффективность.
- Подходит для задач с высокой степенью параллелизма, особенно рекурсивных (например, divide-and-conquer).
- Работает с `ForkJoinTask` (обычно через его подклассы `RecursiveAction` и `RecursiveTask`).
**Пример:**
```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 = ForkJoinPool.commonPool();
long result = pool.invoke(new SumTask(array, 0, array.length));
```
**Примечание:** Не подходит для I/O-задач из-за блокировки потоков.

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