Middle
Kas yra CompletableFuture?
sobes.tech AI
Atsakymas iš AI
CompletableFuture Java 8+ apima Future modelio plėtimą, pridedant asinchroninio programavimo ir užduočių komponavimo galimybes.
Jis įgyvendina CompletionStage ir Future sąsajas. CompletionStage apibrėžia sutartį asinchroniniam vykdymui ir skaičiavimų etapų komponavimui.
Pagrindinės savybės:
- Neužblokuojančios operacijos: leidžia vykdyti užduotis asinchroniškai, neblokuojant pagrindinio vykdymo srauto.
- Komponavimas: suteikia rico API rezultatų sujungimui ir jungimui kelių asinchroninių operacijų.
- Išimčių tvarkymas: integruotos mechanizmai klaidų valdymui asinchroniniuose srautuose.
- Kūrimas: galima kurti užbaigtus, nebaigtus arba klaidinančius
CompletableFuture. - Priklausomybės: leidžia kurti priklausomų užduočių grandines, kur viena vykdymas priklauso nuo kitos pabaigos.
- Paralelinis vykdymas: metodai
allOfiranyOfkelių užduočių vykdymui lygiagrečiai.
Naudojimo pavyzdžiai:
-
Kūrimas ir pabaiga:
// Baigtos `CompletableFuture` sukūrimas CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Hello"); // Neužbaigtos `CompletableFuture` sukūrimas ir vėlesnis užbaigimas CompletableFuture<String> future = new CompletableFuture<>(); // ... asinchroninio darbo vykdymas ... future.complete("Done"); // Arba klaidos atveju // future.completeExceptionally(new RuntimeException("Error")); -
Asinchroninio užduoties vykdymas:
CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> { // Asinchroninis darbas (pvz., failo skaitymas, tinklo užklausa) try { Thread.sleep(1000); } catch (InterruptedException e) { throw new IllegalStateException(e); } return "Async Result"; }); -
Komponavimas su
thenApply:CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10) .thenApply(x -> x * 2); // Ankstesnio žingsnio rezultatas perduodamas funkcijai -
Komponavimas su
thenCombine:CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10); CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20); CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // Rezultatų sujungimas -
Baigimo apdorojimas su
thenAccept:CompletableFuture.supplyAsync(() -> "Final result") .thenAccept(result -> System.out.println("Užduotis baigėsi rezultatu: " + result)); // Veiksmų vykdymas po pabaigos be grąžinamos reikšmės -
Išimčių apdorojimas su
exceptionally:CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> { throw new RuntimeException("Something went wrong"); }).exceptionally(ex -> { System.err.println("Įvyko klaida: " + ex.getMessage()); return "Default Value"; // Numatyta reikšmė klaidos atveju });
CompletableFuture žymiai supaprastina asinchroninio ir neblokuojančio kodo rašymą Java, padarydama jį lengviau skaitomą ir palaikomą nei tradiciniai callback'ai ar blokuojantys Future.get() iškvietimai.