Sobes.tech
Middle

Mis on CompletableFuture?

sobes.tech AI

Vastus AI-lt

CompletableFuture Java 8+ laiendab Future mudelit, lisades võimalused asünkroonseks programmeerimiseks ja ülesannete koostamiseks.

See rakendab CompletionStage ja Future liideseid. CompletionStage määratleb lepingu asünkroonseks täitmiseks ja arvutusetappide koostamiseks.

Peamised omadused:

  • Mitte-blokeerivad operatsioonid: võimaldavad ülesandeid täita asünkroonselt, mitte blokeerides peamist täitmisvoogu.
  • Koostamine: pakub rico API tulemuste ühendamiseks ja mitme asünkroonse operatsiooni ühendamiseks.
  • Vigade käsitlemine: sisseehitatud mehhanismid vigade haldamiseks asünkroonsetes voogudes.
  • Loomine: saab luua lõpetatud, mitte-lõpetatud või vigase CompletableFuture.
  • Sõltuvused: võimaldab luua sõltuvuste ahelad, kus ühe täitmine sõltub teise lõpetamisest.
  • Paralleelne täitmine: meetodid allOf ja anyOf mitme ülesande paralleelseks täitmiseks.

Kasutusnäited:

  1. Loomine ja lõpetamine:

    // Lõpetatud `CompletableFuture` loomine
    CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Hello");
    
    // Mitte-lõpetatud `CompletableFuture` loomine ja selle hilisem lõpetamine
    CompletableFuture<String> future = new CompletableFuture<>();
    // ... asünkroonse töö tegemine ...
    future.complete("Done");
    // Või vea korral
    // future.completeExceptionally(new RuntimeException("Error"));
    
  2. Asünkroonse ülesande täitmine:

    CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> {
        // Asünkroonne töö (nt faili lugemine, võrgupäring)
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
        return "Async Result";
    });
    
  3. Koostamine thenApply-ga:

    CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10)
        .thenApply(x -> x * 2); // Eelmise sammu tulemus antakse funktsioonile
    
  4. Koostamine thenCombine-ga:

    CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10);
    CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20);
    
    CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // Kaks CompletableFuture'i tulemuste ühendamine
    
  5. Lõpetamise töötlemine thenAccept-iga:

    CompletableFuture.supplyAsync(() -> "Final result")
        .thenAccept(result -> System.out.println("Ülesanne lõppes tulemusega: " + result)); // Tegevuse täitmine pärast lõpetamist ilma väärtust tagastamata
    
  6. Vigade töötlemine exceptionally-ga:

    CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> {
        throw new RuntimeException("Something went wrong");
    }).exceptionally(ex -> {
        System.err.println("Viga juhtus: " + ex.getMessage());
        return "Default Value"; // Vaikeväärtus vea korral
    });
    

CompletableFuture lihtsustab oluliselt asünkroonse ja mitte-blokeeriva koodi kirjutamist Java-s, muutes selle kergemini loetavaks ja hooldatavaks võrreldes traditsiooniliste callback-ide või blokeerivate Future.get()-kutsungitega.