Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗jvSpExSv 175 of 322 menu
◀ ▶

Параллельные поручения пулу в Java

Каталог отдаёт цены трёх поставщиков независимо друг от друга. Ждать их строго по очереди в одном потоке долго, а три отдельных запроса через пул позволяют считать данные параллельно в пределах размера пула.

Каждая постановка возвращает свою Future. Порядок завершения может не совпадать с порядком отправки, поэтому результаты связывают с задачей через переменную или список ссылок:

import java.util.ArrayList; import java.util.List; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class Main { public static void main(String[] args) throws Exception { ExecutorService pool = Executors.newFixedThreadPool(3); List<Future<Integer>> pending = new ArrayList<>(); for (int n = 1; n <= 3; n++) { int value = n * 10; Callable<Integer> task = () -> { Thread.sleep(50); return value; }; pending.add(pool.submit(task)); } List<Integer> answers = new ArrayList<>(); for (Future<Integer> slot : pending) { answers.add(slot.get()); } pool.shutdown(); System.out.println(answers); } }

Список ответов сохраняет порядок обхода Future, а не порядок фактического окончания sleep. Так проще сопоставить результат с исходным параметром задачи.

Если пул меньше, чем задач, часть поручений подождёт в очереди, но логика сбора через список ссылок остаётся той же. Альтернатива одному циклу get() - пакетные методы пула, они в следующих уроках.

В пул из 2 потоков поставьте четыре задачи, каждая возвращает квадрат своего номера 1..4. Соберите ответы в список и выведите его одной строкой.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить