Улучшенный API CompletableFuture в Java 9

Java 9 新特性Новые возможности 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 新特性Новые возможности Java 9

Другие расширения