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:
-
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 -
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); }); -
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());