2016-05-04 6 views
3

Die CompletableFuture API ist ziemlich einschüchternd, viel akzeptiert, und Thens und andere Dinge; Es ist schwer zu sagen, warum verschiedene Optionen existieren.Wie starte ich eine CompleableFuture ohne zu blockieren und etwas zu tun, wenn es fertig ist?

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

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

Ich versuche im Grunde ein new Thread(() -> dostuff).start() aber mit besserem Threadpooling, Fehlerbehandlung zu imitieren, etc. Hinweis: ich eigentlich nicht brauche die Runnable Schnittstelle hier, ich bin ein Stück vorhandenen Code generifying.

Was ist der richtige Weg, um meine asynchrone Aufgabe zu starten und das Verhalten auszuführen, wenn sie abgeschlossen ist? oder behandeln Sie eine Ausnahme, die ausgelöst wird?

+0

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

Antwort

2

Hier ist ein einfacher async Rückruf:

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

oder wenn Sie die Fehlerbehandlung:

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

bedeutet, dass dostuff Geräte Runnable, so dass Sie verwenden können

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

auch.

Verwandte Themen