Sobes.tech
Назад к вопросам
Senior
3

Как реализовать параллельные вызовы на Java 17 без виртуальных потоков?

Компании, где спрашивали
СБЕРСБЕР

Ответ от нейросети

sobes.tech AI

В Java 17 без использования виртуальных потоков (Project Loom) для параллельных вызовов обычно применяют классические средства из java.util.concurrent.

Основные подходы:

  1. ExecutorService — пул потоков для управления параллельными задачами.
  2. CompletableFuture — удобный API для асинхронного программирования и комбинирования результатов.

Пример с использованием CompletableFuture:

import java.util.concurrent.*;

public class ParallelCallsExample {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newFixedThreadPool(4);

        CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
            // имитация долгой операции
            sleep(1000);
            return "Result 1";
        }, executor);

        CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
            sleep(500);
            return "Result 2";
        }, executor);

        // Ожидаем оба результата
        CompletableFuture<Void> all = CompletableFuture.allOf(future1, future2);
        all.join();

        System.out.println(future1.get());
        System.out.println(future2.get());

        executor.shutdown();
    }

    private static void sleep(long ms) {
        try {
            Thread.sleep(ms);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}

Такой подход позволяет запускать задачи параллельно, управлять пулом потоков и обрабатывать результаты асинхронно.