Sobes.tech
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:

  1. 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
    
  2. 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);
    });
    
  3. 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());