CompletableFuture API Mejoras
La clase CompletableFuture se introdujo en Java 8 para representar el futuro, que se puede completar estableciendo su valor y estado explícitamente. Se puede utilizar como java.util.concurrent.CompletionStage. Es compatible con funciones y acciones dependientes que se activaron al completarse el futuro. En java 9, la API de CompletableFuture se ha mejorado aún más. A continuación se muestran los cambios relevantes realizados en la API.
- Soporte para retrasos y tiempos muertos.
- Soporte mejorado para subclases.
- Se agregaron nuevos métodos de fábrica.
Soporte para retrasos y tiempos de espera
public CompletableFuture<T> completeOnTimeout(T value, long timeout, TimeUnit unit)
Este método completa este CompletableFuture con el valor dado si no se completa antes del tiempo de espera dado.
public CompletableFuture<T> orTimeout(long timeout, TimeUnit unit)
Este método completa excepcionalmente este CompletableFuture con una TimeoutException si no se completa antes del tiempo de espera dado.
Soporte mejorado para subclases
public Executor defaultExecutor()
Devuelve el Ejecutor predeterminado utilizado para los métodos asíncronos que no especifican un Ejecutor. Este método puede anularse en subclases para devolver un Ejecutor para proporcionar un hilo independiente como mínimo.
public <U> CompletableFuture<U> newIncompleteFuture()
Devuelve un nuevo CompletableFuture incompleto del tipo que devolverá un método CompletionStage. Las subclases de la clase CompletableFuture deben anular este método para devolver una instancia de la misma clase que CompletableFuture. La implementación predeterminada devuelve una instancia de la clase CompletableFuture.
Nuevos métodos de fábrica
public static <U> CompletableFuture<U> completedFuture(U value)
Este método de fábrica devuelve un nuevo CompletableFuture que ya está completado con el valor dado.
public static <U> CompletionStage<U> completedStage(U value)
Este método de fábrica devuelve un nuevo CompletionStage que ya está completado con el valor dado y solo admite los métodos presentes en la interfaz CompletionStage.
public static <U> CompletionStage<U> failedStage(Throwable ex)
Este método de fábrica devuelve un nuevo CompletionStage que ya se completó excepcionalmente con la excepción dada y solo admite los métodos presentes en la interfaz CompletionStage.