Sobes.tech
Middle

CompletableFuture nədir?

sobes.tech Süni İntellekt

AI-dan cavab

CompletableFuture Java 8+-də Future modelinin genişləndirilməsidir və asinxron proqramlaşdırma və tapşırıqların birləşdirilməsi imkanlarını əlavə edir.

O, CompletionStageFuture interfeyslərini həyata keçirir. CompletionStage hesablama mərhələlərinin asinxron icrası və birləşdirilməsi üçün müqaviləni müəyyən edir.

Əsas xüsusiyyətlər:

  • Bloklamayan əməliyyatlar: Tapşırıqları asinxron şəkildə yerinə yetirməyə imkan verir, əsas icra axını bloklamadan.
  • Birləşdirmə: Bir çox asinxron əməliyyatın nəticələrini əlaqələndirmək və birləşdirmək üçün zəngin API təqdim edir.
  • İstisna idarəetməsi: Asinxron axınlarda səhvlərin işlənməsi üçün daxili mexanizmlər.
  • Yaradılması: Tamamlanmış, tamamlanmamış və ya səhv olan CompletableFuture-lər yarada bilərsiniz.
  • Asılılıqlar: Bir tapşırığın digərinin tamamlanmasına bağlı olduğu zəncirlər yaratmağa imkan verir.
  • Paralel icra: allOfanyOf kimi metodlar ilə bir neçə tapşırığı paralel şəkildə icra etmək.

İstifadə nümunələri:

  1. Yaradı və tamamla:

    // Tamamlanmış CompletableFuture yaradılması
    CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Salam");
    
    // Tamamlanmamış CompletableFuture yaradılması və sonra tamamlanması
    CompletableFuture<String> future = new CompletableFuture<>();
    // ... asinxron iş yerinə yetirilir ...
    future.complete("Bitdi");
    // Yaxud səhv olduqda
    // future.completeExceptionally(new RuntimeException("Xəta"));
    
  2. Asinxron tapşırığın yerinə yetirilməsi:

    CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> {
        // Asinxron iş (məsələn, fayldan oxuma, şəbəkə sorğusu)
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
        return "Asinxron Nəticə";
    });
    
  3. thenApply ilə birləşdirmə:

    CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10)
        .thenApply(x -> x * 2); // Əvvəlki mərhələnin nəticəsi funksiyaya ötürülür
    
  4. thenCombine ilə birləşdirmə:

    CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10);
    CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20);
    
    CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // İki CompletableFuture nəticələrinin birləşdirilməsi
    
  5. thenAccept ilə tamamlanma işlənməsi:

    CompletableFuture.supplyAsync(() -> "Nəticə")
        .thenAccept(result -> System.out.println("Tapşırıq nəticə ilə tamamlandı: " + result)); // Tamamlama sonrası hərəkət yerinə yetirmək, dəyər qaytarmadan
    
  6. İstisna ilə işləmə exceptionally ilə:

    CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> {
        throw new RuntimeException("Nəsə səhv oldu");
    }).exceptionally(ex -> {
        System.err.println("Xəta baş verdi: " + ex.getMessage());
        return "Əsas dəyər"; // Səhv zamanı default dəyər qaytarır
    });
    

CompletableFuture Java-da Asynchronous və bloklamayan kod yazmağı çox sadələşdirir, onu daha oxunaqlı və dəstəklənən edir, ənənəvi callbacklər və ya Future.get() bloklama çağırışları ilə müqayisədə.