Sobes.tech
Middle

La ce folosește CompletableFuture în Java?

sobes.tech AI

Răspuns de la AI

CompletableFuture este utilizat pentru executarea asincronă a sarcinilor și compoziția operațiunilor asincrone. Reprezintă rezultatul unei operațiuni asincrone care poate fi finalizată în viitor.

Principalele avantaje și motive pentru utilizare:

  • Executare asincronă: Permite executarea sarcinilor în fundal, fără a bloca firul principal.
  • Compoziția operațiunilor asincrone: Permite legarea mai multor sarcini asincrone, definind modul în care trebuie să fie executate secvențial sau în paralel, și procesarea rezultatelor lor.
  • Gestionarea excepțiilor: Oferă mecanisme pentru gestionarea erorilor în sarcinile asincrone.
  • Flexibilitate: Suportă diferite metode pentru procesarea rezultatului (de exemplu, aplicarea funcțiilor, executarea sarcinii următoare) și definirea firelor de execuție.

Exemple de utilizare:

  1. Executarea mai multor sarcini independente în paralel și așteptarea finalizării lor:

    // Exemplu de executare paralelă a două sarcini
    CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> {
        // Operație lungă 1
        return "Rezultat 1";
    });
    
    CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> {
        // Operație lungă 2
        return "Rezultat 2";
    });
    
    CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2);
    
    combinedFuture.join(); // Așteptarea finalizării ambelor sarcini
    
  2. Executarea operațiunilor asincrone secvențial:

    // Exemplu de execuție secvențială
    CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Valoare inițială");
    
    CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> {
        // Transformarea rezultatului
        return result.length();
    });
    
    transformedFuture.thenAccept(length -> {
        System.out.println("Lungimea șirului: " + length);
    });
    
  3. Gestionarea excepțiilor:

    // Exemplu de gestionare a excepțiilor
    CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> {
        if (true) {
            throw new RuntimeException("A apărut o eroare");
        }
        return "Succes";
    }).exceptionally(ex -> {
        System.err.println("Gestionare eroare: " + ex.getMessage());
        return "Eroare gestionată"; // Valoare de rezervă
    });
    
    System.out.println(errorFuture.join());