CompletableFuture
- Java kursu
- İleri seviye
- Ders 63/82
- 5 dk
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()); // 10join() 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
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
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
CompletableFuture.supplyAsync(() -> 2 + 3)
.____(n -> n * 2);
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.