2 Nomenclatura de los métodos¶
Introducción¶
La mayoría de los métodos de la clase CompletableFuture
tienen nombres que contienen palabras que nos permiten clasificarlos, atendiendo a tres características:
a) Formato en el que se aporta la tarea que debe ejecutarse:
- En forma de Function: Se usan los verbos apply y compose, por ejemplo:
thenApply(function)
,thenCompose
,applyToEither
- En forma de Consumer: Se usa el verbo accept, por ejemplo:
thenAccept(consumer)
,thenAcceptBoth
,acceptEither
- En forma de
Runnable:
Se usa con el verbo "run", por ejemplo:CompletableFuture.runAsync(runnable)
,thenRun(runnable)
,runAfterBoth
,runAfterEither
b) Tipo de operación que se quiere realizar:
- Encadenamiento: La ejecución de un CompletableFuture se inicia después de que se complete el CompletableFuture de la cadena, pasando el resultado de éste al siguiente. Se usa la palabra then. Por ejemplo:
thenRun(runnable)
,thenAccept(consumer)
,thenApply(function)
. - Composición: Se quiere componer el resultado de varios CompletableFuture. Se usa el verbo compose. Por ejemplo:
thenCompose(function)
. - Combinación esperando ambos resultados y combinándolos en una único CompletableFuture. Se usa la palabra both o el verbo combine. Por ejemplo:
thenCombine
,thenAcceptBoth
,runAfterBoth
- Aplicación con el primer resultado de dos posibles: Se ejecuta la tarea en cuanto se obtiene el resultado de uno de los dos CompletableFuture de los que se depende. Se usa con la palabra either. Por ejemplo:
applyToEither
,acceptEither
,runAfterEither
c) En qué thread pool debe ejecutarse la tarea:
- En el mismo hilo que el llamador. Corresponde a los métodos que no terminan en la palabra Async. Por ejemplo:
thenRun(runnable)
,thenAccept(consumer)
,thenApply(function)
. Debemos tener en cuenta que el hilo llamador puede corresponder al hilo principal, por lo que deben ser usados con cuidado. - Asíncronamente en el common fork join pool. Corresponde a los métodos cuyo nombre termina en la palabra Async y no reciben un executor como parámetro. Por ejemplo:
thenRunAsync(runnable)
,thenConsumeAsync(consumer)
,thenApplyAsync(function)
. Debemos tener en cuenta que el common fork join pool usa tantos hilos como núcleos de procesamiento estén disponibles, lo que puede que no sea lo más adecuado si las operaciones que se van a realizar a través de CompletableFuture son intensivas de entrada / salida. Por otro lado, dado que el common fork join pool es común a todas las aplicaciones y es usado por defecto por los streams paralelos, puede que los hilos de dicho ejecutor estén muy ocupados. - En el executor pasado como argumento. Corresponde a los métodos que terminan en la palabra Async y reciben un ejecutor como parámetro. Por ejemplo:
thenRunAsync(runnable, executor)
,thenConsumeAsync(consumer, executor)
,thenApplyAsync(function, executor)
. Ésta es la opción que proporciona un mayor control al desarrollador.