Opprette og fullføre CompletableFuture-objekter
Bruk supplyAsync, runAsync og completedFuture, og fullfør futures manuelt med complete og completeExceptionally.
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 immediatelyFullfø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 completedget() 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 doneisDone, 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 > 3sKort 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.
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
- Opprette og fullføre CompletableFuture-objekter
- Kjeding med thenApply og thenCompose
- Kombinere futures: allOf og anyOf
- Feilhåndtering og asynkron HTTP-pipeline