Комментарии (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 или асинхронных контроллеров.