← Назад к вопросам

Что такое асинхронный запрос?

1.0 Junior🔥 101 комментариев
#Основы Java

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

# Асинхронный запрос

Асинхронный запрос — это операция, при которой вызывающий код не блокируется в ожидании результата, а продолжает выполняться дальше. Результат обрабатывается позже, когда он становится доступным, обычно через колбэк, Future или другой механизм уведомления.

Как это работает

В синхронном запросе:

String result = fetchData(); // Программа ждёт результата
processResult(result);        // Выполнится только после получения

В асинхронном запросе:

fetchDataAsync().thenApply(this::processResult); // Продолжит работу сразу
// Обработка произойдёт когда результат будет готов

Java реализации

Future/ExecutorService:

ExecutorService executor = Executors.newFixedThreadPool(2);
Future<String> future = executor.submit(() -> {
    Thread.sleep(1000);
    return "Результат";
});
String result = future.get(); // Блокирует до получения результата

CompletableFuture:

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    return fetchDataFromServer();
});
future.thenAccept(result -> System.out.println("Получен: " + result));
// Или цепочка операций:
future
    .thenApply(data -> processData(data))
    .thenAccept(processed -> saveToCache(processed))
    .exceptionally(ex -> {
        log.error("Ошибка", ex);
        return null;
    });

Reactive Streams (RxJava, Project Reactor):

Observable.fromCallable(() -> fetchData())
    .subscribeOn(Schedulers.io())
    .observeOn(Schedulers.mainThread())
    .subscribe(
        result -> System.out.println(result),
        error -> System.err.println(error),
        () -> System.out.println("Завершено")
    );

Преимущества

  • Лучшая отзывчивость — приложение не зависает при ожидании
  • Эффективность ресурсов — меньше потоков нужно для одновременных операций
  • Масштабируемость — можно обрабатывать больше запросов одновременно
  • Неблокирующий I/O — особенно важно для сетевых операций и работы с БД

Когда использовать

  • Сетевые запросы (HTTP, API)
  • Операции ввода-вывода (чтение файлов, БД)
  • Долгоживущие операции, которые могут зависнуть
  • Микросервисная архитектура

Асинхронное программирование — ключевая практика современной Java разработки, особенно в Spring Boot приложениях с использованием WebFlux или асинхронных контроллеров.