Wir beleuchten das Starten und die Komposition asynchroner Berechnungen mit
CompletableFuture: wie man Aufgaben über
supplyAsync und
runAsync startet, worin sich die Handler
thenApply,
thenAccept,
thenRun unterscheiden und wann man deren asynchrone Varianten
thenApplyAsync/
thenAcceptAsync/
thenRunAsync wählt. Wir sprechen über Ausführungs‑Threads (
ForkJoinPool oder Ihr
Executor), Ergebnis‑Typen (
CompletableFuture<T>,
CompletableFuture<Void>) und typische Fehler: blockierende
get()/
join(), unbehandelte Fehler ohne
exceptionally/
handle/
whenComplete sowie der Versuch, das Ergebnis innerhalb von
thenRun zu verwenden.