Sobes.tech
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 allOf ir anyOf kelių užduočių vykdymui lygiagrečiai.

Naudojimo pavyzdžiai:

  1. 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"));
    
  2. 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";
    });
    
  3. Komponavimas su thenApply:

    CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10)
        .thenApply(x -> x * 2); // Ankstesnio žingsnio rezultatas perduodamas funkcijai
    
  4. 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
    
  5. 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
    
  6. 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.