Улучшенный API CompletableFuture в Java 9
В Java 8 был представлен классCompletableFuture<T>, который может бытьjava.util.concurrent.Future<T>явно завершён (с установленными значением и статусом) или может использоваться какjava.util.concurrent.CompleteStage. Поддерживает запуск зависимых функций и действий при завершении future. В Java 9 появились некоторыеCompletableFutureулучшения:
Java 9CompletableFutureполучил улучшения:
- Поддержка задержек и тайм-аутов
- Улучшенная поддержка создания подклассов
- Новые фабричные методы
Поддержка задержек и тайм-аутов
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
Черезtimeout(единица измерения вjava.util.concurrent.Timeunits units, например, MILLISECONDS) перед завершением этого CompletableFuture заданным значением. Верните этот CompletableFuture.
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
Если не завершено в течение заданного timeout, завершите этот CompletableFuture с java.util.concurrent.TimeoutException и верните этот CompletableFuture.
Улучшенная поддержка наследования
Внесено множество улучшений, чтобыCompletableFutureможно было легче наследовать. Например, вы можете захотеть переопределить новыйpublic Executor defaultExecutor()метод вместо стандартногоисполнителя。
Ещё один новый метод, который упрощает наследование:
public <U> CompletableFuture<U> newIncompleteFuture()
Новые фабричные методы
Java 8 представила<U> CompletableFuture<U> completedFuture(U value)фабричный метод для возврата ... уже завершённого с заданным значениемCompletableFuture. Java 9 дополнила этот метод новым<U> CompletableFuture<U> failedFuture(Throwable ex)который может возвращать ... завершённый с заданным исключениемCompletableFuture。
Кроме того, Java 9 представила следующую пару ориентированных на стадии фабричных методов, возвращающих завершённые или завершённые с исключением стадии завершения:
- <U> CompletionStage<U> completedStage(U value): Возвращает новый ... завершённый указанным значениемCompletionStage, и поддерживает только интерфейсы, определённые вCompletionStagethe interfaces in
- <U> CompletionStage<U> failedStage(Throwable ex): Возвращает новый ... завершённый указанным исключениемCompletionStage, и поддерживает только интерфейсы, определённые вCompletionStagethe interfaces in
Новые возможности Java 9