Middle
Java'da CompletableFuture ne işe yarar?
sobes.tech yapay zeka
AI'dan gelen yanıt
CompletableFuture, görevlerin eşzamansız yürütülmesi ve eşzamansız işlemlerin bileşimi için kullanılır. Gelecekte tamamlanabilecek bir asenkron işlemin sonucunu temsil eder.
Ana avantajlar ve kullanım nedenleri:
- Eşzamansız yürütme: Görevleri arka planda çalıştırmaya olanak tanır, ana akışı engellemeden.
- Eşzamansız işlemlerin bileşimi: Birden fazla eşzamansız görevi zincirleme, bunların sıralı veya paralel şekilde nasıl yürütüleceğini belirleme ve sonuçlarını işleme imkanı sağlar.
- Hata yönetimi: Eşzamansız görevlerdeki hataları yönetmek için mekanizmalar sağlar.
- Esneklik: Sonuç işleme için farklı yöntemler destekler (örneğin, fonksiyon uygulama, bir sonraki görevi yürütme) ve yürütme akışlarını belirleme.
Kullanım örnekleri:
-
Birden fazla bağımsız görevi paralel yürütüp tamamlanmasını bekleme:
// İki görevin paralel yürütülmesi örneği CompletableFuture<String> future1 = CompletableFuture.supplyAsync(() -> { // Uzun işlem 1 return "Sonuç 1"; }); CompletableFuture<String> future2 = CompletableFuture.supplyAsync(() -> { // Uzun işlem 2 return "Sonuç 2"; }); CompletableFuture<Void> combinedFuture = CompletableFuture.allOf(future1, future2); combinedFuture.join(); // Her iki görevin tamamlanmasını bekle -
Ardışık eşzamansız işlemler:
// Ardışık görev yürütme örneği CompletableFuture<String> initialFuture = CompletableFuture.supplyAsync(() -> "Başlangıç değeri"); CompletableFuture<Integer> transformedFuture = initialFuture.thenApplyAsync(result -> { // Sonucu dönüştür return result.length(); }); transformedFuture.thenAccept(length -> { System.out.println("Dize uzunluğu: " + length); }); -
Hata yönetimi:
// Hata yönetimi örneği CompletableFuture<String> errorFuture = CompletableFuture.supplyAsync(() -> { if (true) { throw new RuntimeException("Bir hata oluştu"); } return "Başarılı"; }).exceptionally(ex -> { System.err.println("Hata yönetimi: " + ex.getMessage()); return "İşlenmiş hata"; // Yedek değer }); System.out.println(errorFuture.join());