Sobes.tech
Middle

CompletableFuture nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Java 8+ içinde CompletableFuture, Future modelinin bir genişlemesini temsil eder ve asenkron programlama ile görevlerin bileşimini ekler.

CompletionStage ve Future arayüzlerini uygular. CompletionStage, asenkron yürütme ve hesaplama adımlarının bileşimi için sözleşmeyi tanımlar.

Ana özellikler:

  • Bloklamayan işlemler: Ana akışı engellemeden görevleri asenkron olarak yürütmeye olanak tanır.
  • Bileşim: Birden fazla asenkron işlemin sonuçlarını bağlama ve birleştirme için zengin bir API sağlar.
  • Hata işleme: Asenkron akışlarda hataları yönetmek için yerleşik mekanizmalar.
  • Oluşturma: Tamamlanmış, tamamlanmamış veya hatalı CompletableFuture oluşturulabilir.
  • Bağımlılıklar: Birinin diğerinin tamamlanmasına bağlı olduğu bağımlı görev zincirleri oluşturmayı sağlar.
  • Paralel yürütme: allOf ve anyOf gibi yöntemler, birkaç görevi paralel olarak yürütmek için kullanılır.

Kullanım örnekleri:

  1. Oluşturma ve tamamlama:

    // Tamamlanmış bir CompletableFuture oluşturma
    CompletableFuture<String> completedFuture = CompletableFuture.completedFuture("Merhaba");
    
    // Tamamlanmamış bir CompletableFuture oluşturma ve daha sonra tamamlama
    CompletableFuture<String> future = new CompletableFuture<>();
    // ... asenkron çalışma yapma ...
    future.complete("Bitti");
    // Veya hata durumunda
    // future.completeExceptionally(new RuntimeException("Hata"));
    
  2. Asenkron görev yürütme:

    CompletableFuture<String> asyncFuture = CompletableFuture.supplyAsync(() -> {
        // Asenkron çalışma (örneğin, dosya okuma, ağ isteği)
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            throw new IllegalStateException(e);
        }
        return "Asenkron Sonuç";
    });
    
  3. thenApply ile bileşim:

    CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10)
        .thenApply(x -> x * 2); // Bir önceki adımın sonucu fonksiyona aktarılır
    
  4. thenCombine ile bileşim:

    CompletableFuture<Integer> future1 = CompletableFuture.supplyAsync(() -> 10);
    CompletableFuture<Integer> future2 = CompletableFuture.supplyAsync(() -> 20);
    
    CompletableFuture<Integer> combinedFuture = future1.thenCombine(future2, (res1, res2) -> res1 + res2); // İki CompletableFuture sonucu birleştirilir
    
  5. thenAccept ile tamamlanma işlemi:

    CompletableFuture.supplyAsync(() -> "Sonuç")
        .thenAccept(result -> System.out.println("Görev sonuç ile bitti: " + result)); // Tamamlandıktan sonra işlem yap
    
  6. exceptionally ile hata yönetimi:

    CompletableFuture<String> futureWithException = CompletableFuture.supplyAsync(() -> {
        throw new RuntimeException("Bir şeyler yanlış gitti");
    }).exceptionally(ex -> {
        System.err.println("Hata oluştu: " + ex.getMessage());
        return "Varsayılan Değer"; // Hata durumunda varsayılan değer döndür
    });
    

CompletableFuture, Java'da asenkron ve bloklamayan kod yazımını önemli ölçüde basitleştirir, kodu daha okunabilir ve bakımı kolay hale getirir, geleneksel geri çağırmalar veya Future.get() bloklama çağrılarına kıyasla.