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

В чем особенность 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-задач из-за блокировки потоков.
Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

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

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

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