API CompletableFuture mejorada de Java 9
Nuevas características de Java 9
Java 8 introdujoCompletableFuture<T>clase, que puede serjava.util.concurrent.Future<T>completada explícitamente (estableciendo su valor y estado), y también puede ser utilizada comojava.util.concurrent.CompleteStage. Admite funciones y acciones dependientes que se disparan cuando el future se completa. Java 9 introdujo algunasCompletableFuturemejoras:
Java 9CompletableFuturehizo mejoras:
- Soporte para delays y timeouts
- Mejora del soporte para subclases
- Nuevos métodos de fábrica
Soporte para delays y timeouts
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
Entimeout(la unidad, expresada enjava.util.concurrent.Timeunits unitspor ejemplo, MILLISECONDS) antes de completar este CompletableFuture con el value dado. Devuelve este CompletableFuture.
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
Si no se completa dentro del timeout dado, completa este CompletableFuture con java.util.concurrent.TimeoutException y devuelve este CompletableFuture.
Mejora del soporte para subclases
hizo muchas mejoras para queCompletableFuturese pueda heredar más fácilmente. Por ejemplo, quizás quieras sobrescribir el nuevopublic Executor defaultExecutor()método para reemplazar el predeterminadoexecutor。
Otro nuevo método que facilita la subclasificación es:
public <U> CompletableFuture<U> newIncompleteFuture()
Nuevos métodos de fábrica
Java 8 introdujo<U> CompletableFuture<U> completedFuture(U value)un método de fábrica para devolver uno ya completado con el value dadoCompletableFuture. Java 9, con un nuevo<U> CompletableFuture<U> failedFuture(Throwable ex)para complementar este método, puede devolver uno completado con la excepción dadaCompletableFuture。
Además, Java 9 introdujo el siguiente par de métodos de fábrica orientados a stage, que devuelven completion stages completados o completados excepcionalmente:
- <U> CompletionStage<U> completedStage(U value): devuelve uno nuevo completado con el value especificadoCompletionStage, y solo admiteCompletionStagelas interfaces que contiene.
- <U> CompletionStage<U> failedStage(Throwable ex): devuelve uno nuevo completado con la excepción especificadaCompletionStage, y solo admiteCompletionStagelas interfaces que contiene.