CodeBlanks Logo Icon CodeBlanks

CompletableFuture

CompletableFuture ile asenkron zincirleri öğrenirsin.

CompletableFuture

CompletableFuture, asenkron işlemleri zincirleme ve birleştirme imkanı sunar. supplyAsync bir görevi havuzda çalıştırır; thenApply, thenAccept gibi yöntemler sonuç üzerinde sıradaki adımı tanımlar.

CompletableFuture<Integer> f =
    CompletableFuture.supplyAsync(() -> 2 + 3)
                     .thenApply(n -> n * 2);
System.out.println(f.join());  // 10

join() sonucu bekler; get()'ten farklı olarak kontrollü istisna fırlatır. Bu, fonksiyonel stilde asenktron akışlar kurmayı kolaylaştırır. Birden çok future'ı allOf ile birleştirebilirsin.

allOf ile birleştirme

Birden çok future'ı paralel çalıştırmak ve hepsinin bitmesini beklemek için allOf kullanılır. Bu, bağımsız görevleri hızlandırmak için idealdir.

CompletableFuture<Void> all = CompletableFuture.allOf(f1, f2);
all.join();
// f1 ve f2 tamamlandı

Buradan sonra her future'ın sonucu f1.join() ile alınır. Bu, paralel API istekleri gibi senaryolarda verimi artırır. anyOf ise en erken biteni döndürür. Bu, modern asenktron Java kodunun temelidir.

Uygulama CompletableFuture zinciri kur

Bir AsyncDemo sınıfında main yaz; CompletableFuture.supplyAsync(() -> 10) ile başla, .thenApply(n -> n + 5) ile 15 üret ve System.out.println(f.join()) ile sonucu yazdır.

Başlangıç kodu

Main.java
import java.util.concurrent.*;

// AsyncDemo sınıfında main yaz

// supplyAsync ile 10 döndüren görevi başlat; thenApply ile 5 ekle; join ile yazdır

Örnek çözüm

Main.java
import java.util.concurrent.*;

class AsyncDemo {
    public static void main(String[] args) {
        CompletableFuture<Integer> f =
            CompletableFuture.supplyAsync(() -> 10).thenApply(n -> n + 5);
        System.out.println(f.join());
    }
}

Beklenen çıktı

15

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 CompletableFuture yöntemlerini eşleştir

Kavram Anlamı
supplyAsync Görevi havuzda çalıştırır
thenApply Sonucu dönüştürür
thenAccept Sonucu tüketir
join Sonucu bekler

2 thenApply çağrısını tamamla

Soru
CompletableFuture.supplyAsync(() -> 2 + 3)
    .____(n -> n * 2);
Cevap
CompletableFuture.supplyAsync(() -> 2 + 3)
    .thenApply(n -> n * 2);

Açıklama: thenApply sonucu dönüştürür.

3 CompletableFuture.join() ne döndürür?

  • Future'ı iptal eder
  • Sonucu bekleyip döndürür Doğru cevap
  • Hemen void
  • Yeni bir future oluşturur

Açıklama: join() sonucu bekleyip döndürür.

İleri seviye bölümündeki tüm dersler