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ı
CompletableFutureoluş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:
allOfveanyOfgibi yöntemler, birkaç görevi paralel olarak yürütmek için kullanılır.
Kullanım örnekleri:
-
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")); -
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ç"; }); -
thenApplyile bileşim:CompletableFuture<Integer> result = CompletableFuture.supplyAsync(() -> 10) .thenApply(x -> x * 2); // Bir önceki adımın sonucu fonksiyona aktarılır -
thenCombineile 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 -
thenAcceptile tamamlanma işlemi:CompletableFuture.supplyAsync(() -> "Sonuç") .thenAccept(result -> System.out.println("Görev sonuç ile bitti: " + result)); // Tamamlandıktan sonra işlem yap -
exceptionallyile 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.