Middle
Miért szükséges a CompletableFuture Java-ban?
sobes.tech MI
Válasz az MI-től
A CompletableFuture az aszinkron feladatok végrehajtására és az aszinkron műveletek összefűzésére szolgál. Egy aszinkron művelet eredményét képviseli, amely a jövőben befejeződhet.
Fő előnyei és okok a használatra:
- Aszinkron végrehajtás: Lehetővé teszi feladatok háttérben történő végrehajtását anélkül, hogy blokkolná a fő szálat.
- Aszinkron műveletek összefűzése: Több aszinkron feladat összekapcsolását teszi lehetővé, meghatározva, hogyan kell őket sorban vagy párhuzamosan végrehajtani, és eredményeiket feldolgozni.
- Kivételkezelés: Mechanizmusokat biztosít a hibák kezelésére az aszinkron feladatokban.
- Rugalmasság: Támogat különböző módszereket az eredmény feldolgozására (pl. függvény alkalmazása, következő feladat végrehajtása) és a végrehajtási szálak meghatározására.
Használati példák:
-
Több független feladat párhuzamos végrehajtása és azok befejeződésének várása:
// Két feladat párhuzamos végrehajtásának példája CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Hosszú művelet 1 return "Eredmény 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Hosszú művelet 2 return "Eredmény 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Várakozás mindkét feladat befejezésére -
Szekvenciális aszinkron műveletek:
// Szekvenciális végrehajtás példája CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Kezdőérték"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Eredmény átalakítása return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Sztring hossza: " + length); }); -
Kivételkezelés:
// Kivételkezelés példája CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Hiba történt"); } return "Siker"; }).exceptionally(ex -> { System.err.println("Hiba kezelése: " + ex.getMessage()); return "Kezelt hiba"; // Tartalék érték }); System.out.println(errorFuture.join());