2016-05-04 4 views
3

L'API CompletableFuture est assez intimidant, beaucoup d'acceptent, et les thens et d'autres choses; il est difficile de dire pourquoi différentes options existent.Comment démarrer un CompletableFuture sans bloquer et faire quelque chose quand c'est fait?

CompletableFuture<?> future = CompletableFuture.supplyAsync(() ->..., executor) 

future.startNonBlocking...((...) -> { callback behavior done when complete } 

Je suis fondamentalement en essayant d'imiter un new Thread(() -> dostuff).start() mais avec une meilleure mise en commun du fil, la gestion des erreurs, etc. Remarque: je ne suis pas vraiment besoin de l'interface Runnable ici, je suis generifying un morceau de code existant.

Quelle est la bonne façon de démarrer ma tâche asynchrone et d'exécuter le comportement quand il est terminé? ou gérer une exception qui est levée?

+0

http://www.nurkiewicz.com/2013/05/java-8-definitive-guide-to.html –

Répondre

2

est ici simple rappel async:

CompletableFuture.supplyAsync(() -> [result]).thenAccept(result -> [action]); 

Ou si vous avez besoin de gestion des erreurs:

CompletableFuture.supplyAsync(() -> [result]).whenComplete((result, exception) -> { 
    if (exception != null) { 
     // handle exception 
    } else { 
     // handle result 
    } 
}); 
2
new Thread(() -> dostuff).start() 

signifie que doStuff outils Runnable, donc vous pouvez utiliser

static CompletableFuture<Void> runAsync(Runnable runnable)  
static CompletableFuture<Void> runAsync(Runnable runnable, Executor executor) 

également.