Middle
Kam skirtas CompletableFuture Java?
sobes.tech AI
Atsakymas iš AI
CompletableFuture naudojamas asinchroniniam užduočių vykdymui ir asinchroninių operacijų komponavimui. Jis atstovauja asinchroninės operacijos rezultatą, kuris gali būti užbaigtas ateityje.
Pagrindiniai privalumai ir naudojimo priežastys:
- Asinchroninis vykdymas: leidžia vykdyti užduotis fono režimu, neblokuojant pagrindinio srauto.
- Asinchroninių operacijų komponavimas: suteikia galimybę sujungti kelias asinchronines užduotis, nustatant, kaip jos turi būti vykdomos nuosekliai arba lygiagrečiai, ir apdorojant jų rezultatus.
- Išimčių apdorojimas: teikia mechanizmus klaidų apdorojimui asinchroninėse užduotyse.
- Lankstumas: palaiko įvairius metodus rezultatui apdoroti (pvz., funkcijos taikymas, sekantis užduoties vykdymas) ir vykdymo srautų apibrėžimą.
Naudojimo pavyzdžiai:
-
Keletas nepriklausomų užduočių vykdymas lygiagrečiai ir jų užbaigimo laukimas:
// Pavyzdys dviejų užduočių vykdymo lygiagrečiai CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Ilga operacija 1 return "Rezultatas 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Ilga operacija 2 return "Rezultatas 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Laukti abiejų užduočių pabaigos -
Sekančių asinchroninių operacijų vykdymas:
// Sekančių užduočių pavyzdys CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Pradinis reikšmė"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Rezultato transformavimas return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Eilutės ilgis: " + length); }); -
Išimčių apdorojimas:
// Išimčių apdorojimo pavyzdys CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Įvyko klaida"); } return "Sėkmė"; }).exceptionally(ex -> { System.err.println("Klaidos apdorojimas: " + ex.getMessage()); return "Apdorota klaida"; // Atsarginė reikšmė }); System.out.println(errorFuture.join());