0Pricing
Java Academy · Lektion

CompletableFutures erstellen und abschließen

Verwenden Sie supplyAsync, runAsync und completedFuture und schließen Sie Futures manuell mit complete und completeExceptionally ab.

CompletableFutures erstellen und abschließen ist eine kostenlose Java Academy-Lektion auf CoddyKit. Dies ist Lektion 1 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Java Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was ist CompletableFuture?

CompletableFuture<T> (Java 8+) repräsentiert eine asynchrone Berechnung, die explizit abgeschlossen, verkettet und kombiniert werden kann. Die Klasse implementiert sowohl Future als auch CompletionStage.

supplyAsync: Eine asynchrone Berechnung starten

CompletableFuture.supplyAsync() führt einen Supplier im gemeinsamen ForkJoinPool aus und gibt ein Future mit dem Ergebnis zurück.

CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
    // runs on ForkJoinPool.commonPool()
    return fetchDataFromNetwork();
});
System.out.println("Non-blocking — this runs immediately");

runAsync: Starten und vergessen

runAsync() führt einen Runnable asynchron aus und gibt CompletableFuture<Void> zurück. Verwenden Sie es, wenn Sie kein Ergebnis benötigen.

CompletableFuture<Void> task = CompletableFuture.runAsync(() ->
    sendEmail("user@example.com", "Welcome!"));
task.thenRun(() -> System.out.println("Email sent"));

Benutzerdefinierter Executor

Übergeben Sie einen benutzerdefinierten Executor, um den für die Berechnung verwendeten Thread-Pool zu steuern – besonders wichtig in Webanwendungen, wenn Sie eine Blockierung des gemeinsamen Pools vermeiden möchten.

ExecutorService pool = Executors.newFixedThreadPool(10);
CompletableFuture<User> future = CompletableFuture.supplyAsync(
    () -> userService.findById(42L), pool
);

completedFuture: Bereits abgeschlossener Wert

CompletableFuture.completedFuture(value) gibt ein bereits abgeschlossenes Future zurück. Das ist nützlich für Tests oder wenn Sie in einer asynchronen Pipeline einen sofort verfügbaren Wert zurückgeben möchten.

CompletableFuture<String> cached = CompletableFuture.completedFuture("cached-value");
cached.thenAccept(System.out::println); // runs immediately

Ein Future manuell abschließen

Verwenden Sie complete(), um das Ergebnis von außerhalb der Berechnung bereitzustellen. Verwenden Sie completeExceptionally(), um einen Fehler zu signalisieren.

CompletableFuture<String> promise = new CompletableFuture<>();
// In another thread or callback:
promise.complete("done!");       // signals success
// promise.completeExceptionally(new RuntimeException("fail")); // signals failure
String result = promise.get();   // blocks until completed

get() und join()

Sowohl get() als auch join() blockieren, bis das Future abgeschlossen ist. get() löst geprüfte Ausnahmen aus, während join() sie in die ungeprüfte CompletionException verpackt.

try {
    String r = future.get(5, TimeUnit.SECONDS); // checked exceptions
} catch (TimeoutException | InterruptedException | ExecutionException e) { ... }
// Or:
String r = future.join(); // throws CompletionException (unchecked)

getNow() für eine nicht blockierende Prüfung

getNow(defaultValue) gibt das Ergebnis zurück, wenn die Berechnung bereits abgeschlossen ist, oder andernfalls den angegebenen Standardwert – ohne zu blockieren oder zu warten.

String result = future.getNow("loading...");
System.out.println(result); // "loading..." if not yet done

isDone, isCancelled, isCompletedExceptionally

Prüfen Sie den Zustand eines Futures, ohne zu blockieren. Kombinieren Sie diese Prüfungen in Polling-Schleifen oder Überwachungscode.

if (future.isDone())                    System.out.println("Completed");
if (future.isCancelled())               System.out.println("Cancelled");
if (future.isCompletedExceptionally()) System.out.println("Failed");

cancel() zur Timeout-Behandlung

Rufen Sie cancel(true) auf, um eine laufende Berechnung abzubrechen. Das Future wechselt in den abgebrochenen Zustand, und jedes blockierende get() löst eine CancellationException aus.

CompletableFuture<String> future = fetchAsync();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(() -> future.cancel(true), 3, TimeUnit.SECONDS);

completeOnTimeout (Java 9+)

completeOnTimeout(value, timeout, unit) schließt das Future automatisch mit einem Standardwert ab, wenn es nicht innerhalb des Timeouts abgeschlossen wird – sauberer als ein manueller Abbruch.

CompletableFuture<String> result = fetchAsync()
    .completeOnTimeout("default", 3, TimeUnit.SECONDS);
System.out.println(result.join()); // "default" if fetch took > 3s

Schnelltest

Welche Methode startet eine asynchrone Berechnung im gemeinsamen ForkJoinPool und gibt einen Wert zurück?

Zusammenfassung

supplyAsync und runAsync starten asynchrone Arbeiten. Mit complete und completeExceptionally schließen Sie Berechnungen manuell ab. Verwenden Sie join() für blockierende Aufrufe mit ungeprüften Ausnahmen. completeOnTimeout behandelt Timeouts auf saubere Weise.

Häufig gestellte Fragen

Ist die Lektion „CompletableFutures erstellen und abschließen“ kostenlos?

Ja — der vollständige Text von „CompletableFutures erstellen und abschließen“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Java Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Java Academy-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „CompletableFutures erstellen und abschließen“?

Verwenden Sie supplyAsync, runAsync und completedFuture und schließen Sie Futures manuell mit complete und completeExceptionally ab. Du übst Java Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Java Academy zu starten?

Keine Vorkenntnisse erforderlich. Java Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 1 von 4.

Wie lange dauert die Lektion „CompletableFutures erstellen und abschließen“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Java Academy-Lektion Code schreiben und ausführen?

Ja. Jede Java Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. CompletableFutures erstellen und abschließen
  2. Verketten mit thenApply und thenCompose
  3. Futures kombinieren: allOf und anyOf
  4. Fehlerbehandlung und asynchrone HTTP-Pipeline
← Zurück zu Java Academy