Класс CompletableFuture был введен в Java 8 для представления Future, которое можно завершить, задав его значение и статус статуса. Может использоваться как java.util.concurrent.CompletionStage. Он поддерживает зависимые функции и действия, которые были вызваны после завершения будущего. В Java 9 CompletableFuture API был улучшен еще больше. Ниже приведены соответствующие изменения, внесенные в API.
- Поддержка задержек и тайм-аутов.
- Улучшена поддержка подклассов.
- Добавлены новые заводские методы.
Поддержка задержек и тайм-аутов
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
Этот метод завершает это CompletableFuture с заданным значением, если иное не завершено до заданного времени ожидания.
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
Этот метод исключительно завершает это CompletableFuture с TimeoutException, если иное не завершено до заданного времени ожидания.
Улучшена поддержка подклассов
public Executor defaultExecutor()
Он возвращает Executor по умолчанию, используемый для асинхронных методов, которые не указывают Executor. Этот метод может быть переопределен в подклассах, чтобы возвратить Исполнителя как минимум для одного независимого потока.
public <U> CompletableFuture<U> newIncompleteFuture()
Возвращает новое незавершенное CompletableFuture типа, которое будет возвращено методом CompletionStage. Подклассы класса CompletableFuture должны переопределить этот метод, чтобы возвратить экземпляр того же класса, что и этот CompletableFuture. Реализация по умолчанию возвращает экземпляр класса CompletableFuture.
Новые фабричные методы
public static <U> CompletableFuture<U> completedFuture(U value)
Этот фабричный метод возвращает новое CompletableFuture, которое уже завершено с заданным значением.
public static <U> CompletionStage<U> completedStage(U value)
Этот фабричный метод возвращает новый CompletionStage, который уже завершен с заданным значением и поддерживает только те методы, которые присутствуют в интерфейсе CompletionStage.
public static <U> CompletionStage<U> failedStage(Throwable ex)
Этот фабричный метод возвращает новый CompletionStage, который уже завершен исключительно с данным исключением и поддерживает только те методы, которые присутствуют в интерфейсе CompletionStage.