Java Academy · leksjon

Opprette og fullføre CompletableFuture-objekter

Bruk supplyAsync, runAsync og completedFuture, og fullfør futures manuelt med complete og completeExceptionally.

Leksjon 1 av 413 trinn

Opprette og fullføre CompletableFuture-objekter er en gratis leksjon i Java Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Java Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva er CompletableFuture?

CompletableFuture<T> (Java 8+) representerer en asynkron beregning som kan fullføres eksplisitt, kjedes sammen og kombineres. Den implementerer både Future og CompletionStage.

supplyAsync: Starte en asynkron beregning

CompletableFuture.supplyAsync() kjører en Supplier i den felles ForkJoinPool og returnerer en future med resultatet.

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

runAsync: Starte og glemme

runAsync() kjører en Runnable asynkront og returnerer CompletableFuture<Void>. Bruk den når du ikke trenger et resultat.

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

Egendefinert Executor

Send inn en egendefinert Executor for å styre trådpollen som brukes til beregningen – dette er viktig i webapplikasjoner der du vil unngå å blokkere den felles pollen.

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

completedFuture: Verdi som allerede er fullført

CompletableFuture.completedFuture(value) returnerer en future som allerede er fullført. Dette er nyttig ved testing eller når du har en umiddelbar verdi som skal returneres i en asynkron pipeline.

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

Fullføre en future manuelt

Bruk complete() for å angi resultatet utenfra beregningen. Bruk completeExceptionally() for å signalisere en feil.

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() og join()

Både get() og join() blokkerer til futuren er fullført. get() kaster checked exceptions, mens join() pakker dem inn i den unchecked unntakstypen CompletionException.

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

getNow() for en ikke-blokkerende kontroll

getNow(defaultValue) returnerer resultatet hvis futuren allerede er fullført, eller den angitte standardverdien hvis ikke – uten blokkering eller venting.

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

isDone, isCancelled, isCompletedExceptionally

Kontroller statusen til en future uten å blokkere. Kombiner disse kontrollene i polling-løkker eller overvåkingskode.

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

cancel() for håndtering av tidsavbrudd

Kall cancel(true) for å avbryte en pågående beregning. Futuren går over til tilstanden avbrutt, og enhver blokkerende get() kaster CancellationException.

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

completeOnTimeout (Java 9+)

completeOnTimeout(value, timeout, unit) fullfører automatisk futuren med en standardverdi hvis den ikke er fullført innen tidsavbruddet – ryddigere enn å avbryte manuelt.

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

Kort kontroll

Hvilken metode starter en asynkron beregning i den felles ForkJoinPool og returnerer en verdi?

Oppsummering

supplyAsync og runAsync starter asynkront arbeid. complete og completeExceptionally fullfører manuelt. Bruk join() for blokkering med unchecked exceptions. completeOnTimeout håndterer tidsavbrudd på en ryddig måte.

Gratis å komme i gang

Lær deg Java med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
104
Leksjoner
374

Ofte stilte spørsmål

Er leksjonen «Opprette og fullføre CompletableFuture-objekter» gratis?

Ja – hele teksten i «Opprette og fullføre CompletableFuture-objekter» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av Java Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i Java Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Opprette og fullføre CompletableFuture-objekter»?

Bruk supplyAsync, runAsync og completedFuture, og fullfør futures manuelt med complete og completeExceptionally. Du øver på Java Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Java Academy?

Ingen tidligere erfaring er nødvendig. Java Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.

Hvor lang tid tar leksjonen «Opprette og fullføre CompletableFuture-objekter»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Java Academy-leksjonen?

Ja. Alle Java Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Opprette og fullføre CompletableFuture-objekter
  2. Kjeding med thenApply og thenCompose
  3. Kombinere futures: allOf og anyOf
  4. Feilhåndtering og asynkron HTTP-pipeline
← Tilbake til Java Academy