Middle
Java-da CompletableFuture nə üçün lazımdır?
sobes.tech Süni İntellekt
AI-dan cavab
CompletableFuture tapşırıqların asinxron icrasına və asinxron əməliyyatların birləşdirilməsinə xidmət edir. Bu, gələcəkdə tamamlanması mümkün olan asinxron əməliyyatın nəticəsini təmsil edir.
Əsas üstünlüklər və istifadə səbəbləri:
- Asinxron icra: Əsas axını bloklamadan tapşırıqları fon rejimində icra etməyə imkan verir.
- Asinxron əməliyyatların birləşdirilməsi: Bir neçə asinxron tapşırığı ardıcıl və ya paralel şəkildə necə icra ediləcəyini müəyyən etməyə və nəticələrini işləməyə imkan verir.
- Xəta idarəetməsi: Asinxron tapşırıqlarda səhvlərin idarə olunması üçün mexanizmlər təqdim edir.
- Çeviklik: Nəticənin işlənməsi üçün müxtəlif metodları dəstəkləyir (məsələn, funksiyaları tətbiq etmək, növbəti tapşırığı icra etmək) və icra axınlarını müəyyən edir.
İstifadə nümunələri:
-
Bir neçə müstəqil tapşırığı paralel şəkildə icra etmək və onların tamamlanmasını gözləmək:
// İki tapşırığın paralel icrası nümunəsi CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Uzun əməliyyat 1 return "Nəticə 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Uzun əməliyyat 2 return "Nəticə 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Hər iki tapşırığın tamamlanmasını gözləmək -
Ardıcıl asinxron əməliyyatlar:
// Ardıcıl əməliyyatların nümunəsi CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "İlkin dəyər"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Nəticəni çevirmək return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Sətirin uzunluğu: " + length); }); -
Xəta idarəetməsi:
// Xəta idarəetmə nümunəsi CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Xəta baş verdi"); } return "Uğur"; }).exceptionally(ex -> { System.err.println("Xəta idarəetməsi: " + ex.getMessage()); return "İdarə olunan xəta"; // Yedəkləyici dəyər }); System.out.println(errorFuture.join());