completionstage completablefuture baeldung await async java completable-future

java - baeldung - Listenablefuture vs Completablefuture



java 8 promise (1)

Me esforcé mucho pero no encontré ningún artículo o blog que comparara claramente ListenableFuture y CompletableFuture , y ofrece un buen análisis.

Entonces, si alguien puede explicarme o señalarme a un blog o artículo así, será realmente bueno para mí.


Tanto ListenableFuture como CompletableFuture tienen una ventaja sobre su clase principal Futuro al permitir que la persona que llama "registre" de una forma u otra una devolución de llamada cuando se complete la acción asíncrona.

Con Future puedes hacer esto:

ExecutorService executor = ...; Future f = executor.submit(...); f.get();

f.get () bloquea hasta que se completa la acción asíncrona;

Con ListenableFuture puede registrar una devolución de llamada como esta:

ListenableFuture listenable = service.submit(...); Futures.addCallback(listenable, new FutureCallback<Object>() { @Override public void onSuccess(Object o) { //handle on success } @Override public void onFailure(Throwable throwable) { //handle on failure } })

Con CompletableFuture también puede registrar una devolución de llamada para cuando la tarea se complete, pero es diferente de ListenableFuture en que se puede completar desde cualquier hilo que quiera que se complete.

CompletableFuture completableFuture = new CompletableFuture(); completableFuture.whenComplete(new BiConsumer() { @Override public void accept(Object o, Object o2) { //handle complete } }); // complete the task completableFuture.complete(new Object())

Cuando se completa un subproceso en la tarea, el valor recibido de una llamada a get () se establece con el valor del parámetro si la tarea aún no se ha completado.

Lea sobre CompletableFuture