CompletableFuture-olioiden luominen ja valmistaminen
Käytä metodeja supplyAsync, runAsync ja completedFuture sekä valmistele future-oliot itse metodeilla complete ja completeExceptionally.
CompletableFuture-olioiden luominen ja valmistaminen on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mikä on CompletableFuture?
CompletableFuture<T> (Java 8+) edustaa asynkronista laskentaa, joka voidaan valmistaa, ketjuttaa ja yhdistää eksplisiittisesti. Se toteuttaa sekä Future- että CompletionStage-rajapinnan.
supplyAsync: asynkronisen laskennan käynnistäminen
CompletableFuture.supplyAsync() suorittaa Supplier-toiminnon yhteisessä ForkJoinPoolissa ja palauttaa tuloksen sisältävän futuren.
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// runs on ForkJoinPool.commonPool()
return fetchDataFromNetwork();
});
System.out.println("Non-blocking — this runs immediately");runAsync: käynnistä ja unohda
runAsync() suorittaa Runnable-toiminnon asynkronisesti ja palauttaa CompletableFuture<Void>-olion. Käyttäkää sitä, kun ette tarvitse tulosta.
CompletableFuture<Void> task = CompletableFuture.runAsync(() ->
sendEmail("user@example.com", "Welcome!"));
task.thenRun(() -> System.out.println("Email sent"));Mukautettu Executor
Välittäkää mukautettu Executor hallitaksenne laskennassa käytettävää säiepoolia – tämä on olennaista verkkosovelluksissa, joissa haluatte välttää yhteisen poolin estämistä.
ExecutorService pool = Executors.newFixedThreadPool(10);
CompletableFuture<User> future = CompletableFuture.supplyAsync(
() -> userService.findById(42L), pool
);completedFuture: valmiiksi valmistunut arvo
CompletableFuture.completedFuture(value) palauttaa valmiiksi valmistuneen futuren. Se on hyödyllinen testeissä tai silloin, kun teillä on asynkronisessa putkessa heti palautettava arvo.
CompletableFuture<String> cached = CompletableFuture.completedFuture("cached-value");
cached.thenAccept(System.out::println); // runs immediatelyFuturen valmistaminen manuaalisesti
Käyttäkää complete()-metodia tuloksen antamiseen laskennan ulkopuolelta. Käyttäkää completeExceptionally()-metodia virheen ilmoittamiseen.
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() ja join()
Sekä get() että join() estävät suoritusta, kunnes future valmistuu. get() heittää tarkistettavia poikkeuksia, kun taas join() käärii ne tarkistamattomaan CompletionException-poikkeukseen.
try {
String r = future.get(5, TimeUnit.SECONDS); // checked exceptions
} catch (TimeoutException | InterruptedException | ExecutionException e) { ... }
// Or:
String r = future.join(); // throws CompletionException (unchecked)getNow() estämättömään tarkistukseen
getNow(defaultValue) palauttaa tuloksen, jos future on jo valmistunut, tai annetun oletusarvon, jos se ei ole – kutsu ei estä suoritusta eikä odota.
String result = future.getNow("loading...");
System.out.println(result); // "loading..." if not yet doneisDone, isCancelled, isCompletedExceptionally
Tarkistakaa futuren tila estämättä suoritusta. Yhdistäkää nämä tarkistukset kyselysilmukoissa tai valvontakoodissa.
if (future.isDone()) System.out.println("Completed");
if (future.isCancelled()) System.out.println("Cancelled");
if (future.isCompletedExceptionally()) System.out.println("Failed");cancel() aikakatkaisujen käsittelyyn
Kutsukaa cancel(true) käynnissä olevan laskennan peruuttamiseksi. Future siirtyy peruutettuun tilaan, ja estävä get()-kutsu heittää CancellationException-poikkeuksen.
CompletableFuture<String> future = fetchAsync();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(() -> future.cancel(true), 3, TimeUnit.SECONDS);completeOnTimeout (Java 9+)
completeOnTimeout(value, timeout, unit) valmistaa futuren automaattisesti oletusarvolla, jos se ei ole valmistunut aikakatkaisun kuluessa – tämä on siistimpi ratkaisu kuin manuaalinen peruutus.
CompletableFuture<String> result = fetchAsync()
.completeOnTimeout("default", 3, TimeUnit.SECONDS);
System.out.println(result.join()); // "default" if fetch took > 3sPikatarkistus
Mikä metodi käynnistää asynkronisen laskennan yhteisessä ForkJoinPoolissa ja palauttaa arvon?
Kertaus
supplyAsync / runAsync käynnistävät asynkronisen työn. complete / completeExceptionally valmistavat futuren manuaalisesti. Käyttäkää join()-metodia tarkistamattomaan estämiseen. completeOnTimeout käsittelee aikakatkaisut siististi.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”CompletableFuture-olioiden luominen ja valmistaminen” ilmainen?
Kyllä – oppitunnin ”CompletableFuture-olioiden luominen ja valmistaminen” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”CompletableFuture-olioiden luominen ja valmistaminen”?
Käytä metodeja supplyAsync, runAsync ja completedFuture sekä valmistele future-oliot itse metodeilla complete ja completeExceptionally. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.
Kuinka kauan ”CompletableFuture-olioiden luominen ja valmistaminen”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- CompletableFuture-olioiden luominen ja valmistaminen
- Ketjutus thenApply- ja thenCompose-metodeilla
- Future-olioiden yhdistäminen: allOf ja anyOf
- Virheenkäsittely ja asynkroninen HTTP-putki