Łączenie CompletableFuture
Łącz operacje asynchroniczne bez blokowania, używając CompletableFuture.
Porównanie kodu
✕ Pre-Java 8
Future<String> future =
executor.submit(this::fetchData);
String data = future.get(); // blocks
String result = transform(data);
✓ Java 8+
CompletableFuture.supplyAsync(
this::fetchData
)
.thenApply(this::transform)
.thenAccept(IO::println);
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Umożliwia łączenie operacji
Składasz kroki asynchroniczne w czytelny pipeline.
Bez blokowania
Żaden wątek nie czeka bezczynnie na wynik.
Obsługa błędów
exceptionally() i handle() upraszczają odzyskiwanie po błędach.
Stare podejście
Blokujące Future.get()
Nowoczesne podejście
CompletableFuture
Od JDK
8
Poziom trudności
Średniozaawansowany
Wsparcie JDK
Łączenie CompletableFuture
Dostępne
Szeroko dostępne od JDK 8 (marzec 2014)
Jak to działa
CompletableFuture pozwala budować nieblokujące asynchroniczne potoki. Łącz kroki przez thenApply, thenCompose i thenAccept. Błędy obsługuj przez exceptionally(). Wiele future można łączyć przez allOf/anyOf.
Powiązana dokumentacja