Middle
Milleks on Java-s vajalik CompletableFuture?
sobes.tech AI
Vastus AI-lt
CompletableFuture kasutatakse asünkroonsete ülesannete täitmiseks ja asünkroonsete operatsioonide koostamiseks. See esindab asünkroonse operatsiooni tulemust, mis võib tulevikus olla valmis.
Peamised eelised ja kasutamise põhjused:
- Asünkroonne täitmine: võimaldab ülesandeid taustal täita, mitte blokeerides peamist voogu.
- Asünkroonsete operatsioonide koostamine: võimaldab ühendada mitu asünkroonset ülesannet, määrates, kuidas need peaksid järjekorras või paralleelselt täituma, ning töödelda nende tulemusi.
- Erandite töötlemine: pakub mehhanisme vigade töötlemiseks asünkroonsetes ülesannetes.
- Paindlikkus: toetab erinevaid meetodeid tulemuse töötlemiseks (nt funktsiooni rakendamine, järgmise ülesande täitmine) ning täitmise voogude määratlemist.
Kasutusnäited:
-
Mitme sõltumatu ülesande paralleelne täitmine ja nende lõpetamise ootamine:
// Näide kahe ülesande paralleelsest täitmisest CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Pikk operatsioon 1 return "Tulemus 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Pikk operatsioon 2 return "Tulemus 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Ootamine mõlema ülesande lõpetamiseks -
Järgneva asünkroonse operatsiooni täitmine:
// Näide järjestikustest asünkroonsetest ülesannetest CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Algväärtus"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Tulemuse teisendamine return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Stringi pikkus: " + length); }); -
Erandite töötlemine:
// Näide erandite töötlemisest CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Viga tekkis"); } return "Edu"; }).exceptionally(ex -> { System.err.println("Viga töötlemine: " + ex.getMessage()); return "Töödeldud viga"; // Asendusväärtus }); System.out.println(errorFuture.join());