Middle
Na čo je v Jave potrebný CompletableFuture?
sobes.tech AI
Odpoveď od AI
CompletableFuture sa používa na asynchrónne vykonávanie úloh a kompozíciu asynchrónnych operácií. Predstavuje výsledok asynchrónnej operácie, ktorý môže byť dokončený v budúcnosti.
Hlavné výhody a dôvody na použitie:
- Asynchrónne vykonávanie: Umožňuje vykonávať úlohy na pozadí, bez blokovania hlavného vlákna.
- Kompozícia asynchrónnych operácií: Dáva možnosť spájať viac asynchrónnych úloh, určujúc, ako majú byť vykonávané postupne alebo paralelne, a spracovávať ich výsledky.
- Spracovanie výnimiek: Poskytuje mechanizmy na spracovanie chýb v asynchrónne vykonávaných úlohách.
- Flexibilita: Podpora rôznych metód na spracovanie výsledku (napríklad použitie funkcie, vykonanie nasledujúcej úlohy) a definovanie tokov vykonávania.
Príklady použitia:
-
Vykonávanie viacerých nezávislých úloh paralelne a čakanie na ich dokončenie:
// Príklad paralelného vykonávania dvoch úloh CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Dlhá operácia 1 return "Výsledok 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Dlhá operácia 2 return "Výsledok 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Čakanie na dokončenie oboch úloh -
Vykonávanie po sebe nasledujúcich asynchrónnych operácií:
// Príklad po sebe nasledujúcich úloh CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Počiatočná hodnota"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Prevod výsledku return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Dĺžka reťazca: " + length); }); -
Spracovanie výnimiek:
// Príklad spracovania výnimky CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Vyskytla sa chyba"); } return "Úspech"; }).exceptionally(ex -> { System.err.println("Spracovanie chyby: " + ex.getMessage()); return "Spracovaná chyba"; // Náhradná hodnota }); System.out.println(errorFuture.join());