Sobes.tech
Middle
27

Какие способы знаешь, чтобы не блокировать метод навсегда при ожидании от внешней зависимости?

Компании, где спрашивали
Лоция

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

sobes.tech AI

Чтобы не блокировать метод навсегда при ожидании ответа от внешней зависимости в Java, можно использовать следующие подходы:

  • Асинхронное программирование: запускать запросы к внешним сервисам в отдельных потоках или использовать CompletableFuture, чтобы основной поток не блокировался.

  • Таймауты: устанавливать таймауты на операции ввода-вывода или на ожидание результата, чтобы метод не зависал бесконечно.

  • Реактивное программирование: использовать библиотеки типа Reactor или RxJava, которые позволяют работать с потоками данных асинхронно и неблокирующе.

  • Circuit Breaker (предохранитель): применять паттерн, который при обнаружении проблем с внешним сервисом временно прекращает попытки обращения к нему, чтобы не блокировать систему.

Пример с CompletableFuture и таймаутом:

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // вызов внешнего сервиса
    return externalService.call();
});

try {
    String result = future.get(3, TimeUnit.SECONDS); // ждем максимум 3 секунды
} catch (TimeoutException e) {
    // обработка таймаута
}