Java && Management
4 subscribers
5 photos
6 links
Для senior Java-разработчиков, архитекторов и тимлидов: JVM, архитектура, эксплуатация и инженерное управление. Первичные источники, актуальные релизы и выводы для решений.

Автор — Андрей Овчаренко. Технический аудит: https://krot.name/
Download Telegram
Timeout завершает Future, но не работу

В CompletableFuture легко перепутать завершение обещания и остановку работы. Первое API делает за строку; второе за вас никто, зараза, не спроектирует.

Oracle API: cancel(...) завершает stage через CancellationException, но mayInterruptIfRunning здесь не имеет эффекта — interrupts не управляют обработкой. orTimeout завершает тот же Future через TimeoutException, а completeOnTimeout подставляет значение. Supplier, JDBC-запрос или HTTP-вызов могут продолжать занимать ресурс.

Поэтому я развожу четыре слоя:
— deadline операции;
— timeout реального ресурса;
— cooperative cancellation;
— completion для caller и dependents.

Fallback допустим только как явный бизнес-контракт. TimeoutException у caller и живой JDBC-запрос — не cancellation, а перенос проблемы в мониторинг.

#Java #concurrency #CompletableFuture #reliability