Назад к вопросам
СБЕР
Senior
3
Как реализовать параллельные вызовы на Java 17 без виртуальных потоков?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В Java 17 без использования виртуальных потоков (Project Loom) для параллельных вызовов обычно применяют классические средства из java.util.concurrent.
Основные подходы:
- ExecutorService — пул потоков для управления параллельными задачами.
- 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();
}
}
}
Такой подход позволяет запускать задачи параллельно, управлять пулом потоков и обрабатывать результаты асинхронно.