Вопрос проверяет знание асинхронного программирования и использования CompletableFuture для параллельных запросов.
Используйте CompletableFuture.supplyAsync() для каждого запроса и объедините результаты через CompletableFuture.allOf().
Шаги для параллельных запросов:
Создайте отдельный CompletableFuture для каждого запроса:
CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> getDataFromSystem1());
CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> getDataFromSystem2());Дождитесь завершения всех:
CompletableFuture<Void> allFutures = CompletableFuture.allOf(future1, future2, future3, future4);
allFutures.join(); // Блокирует поток, пока все не завершатсяПолучите результаты:
String result1 = future1.join();
String result2 = future2.join();Пример:
List<CompletableFuture<String>> futures = List.of(
CompletableFuture.supplyAsync(() -> fetchData("System1")),
CompletableFuture.supplyAsync(() -> fetchData("System2"))
);
CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]))
.thenRun(() -> futures.forEach(f -> System.out.println(f.join())));Когда использовать:
Для независимых задач, которые можно выполнять параллельно.
Чтобы избежать блокировки основного потока.