Middle
CompletableFuture sinfining konsepti haqida gapiring.
sobes.tech AI
AIdan javob
CompletableFuture Java 8+ da sınıfı olup, Future ve CompletionStage arayüzlerini uygular. Bu, gelecekte bir noktada tamamlanabilecek (veya hata verebilecek) asenkron bir hesaplamayı temsil eder ve sonuç üzerinde ardışık işlemler, ana akışı engellemeden, deklaratif olarak gerçekleştirilebilir.
Ana özellikler:
- Asenkron yürütme: Görevleri ayrı bir iş parçacığında (veya iş parçacığı havuzunda) başlatmaya olanak tanır.
- Bileşim: Birden fazla
CompletableFuture'yu birleştirerek bağımlı işlem zincirleri oluşturulabilir. - Hata yönetimi: Asenkron hesaplamalardaki hataları işlemek için metodlar sağlar.
- Engellemeden işlemler: Sonuç veya hata, future tamamlandığında, açıkça beklemeden (
get()) işlenir.
Ana metodlar:
- Oluşturma:
supplyAsync(Supplier<T> supplier): BirSupplier'ı asenkron olarak çalıştırır ve onun sonucu ile birCompletableFuturedöner.runAsync(Runnable runnable): BirRunnable'ı asenkron olarak çalıştırır veCompletableFuture<Void>döner.completedFuture(T value): Zaten tamamlanmış, belirli bir değerle oluşturulmuş birCompletableFuturedöner.
- Dönüşüm:
thenApply(Function<T, U> fn): Future tamamlandığında fonksiyon uygular.thenAccept(Consumer<T> action): Sonuç tamamlandığında bir işlem gerçekleştirir.thenRun(Runnable action): Sonuç ne olursa olsun, tamamlandığında bir işlem yapar.thenCompose(Function<T, CompletionStage<U>> fn): Zincirler oluşturmaya izin verir, burada bir future'un sonucu başka bir future'un oluşturulmasında kullanılır.
- Kombinasyon:
thenCombine(CompletionStage<U> other, BiFunction<T, U, V> fn): İki future'un sonuçlarını birleştirir.allOf(CompletableFuture<?>... cfs): Tüm verilen future'lar tamamlandığında tamamlananCompletableFuture<Void>döner.anyOf(CompletableFuture<?>... cfs): Herhangi biri tamamlandığında tamamlananCompletableFuture<Object>döner.
- Hata yönetimi:
exceptionally(Function<Throwable, T> fn): Hataları işler ve alternatif bir değer döner.handle(BiFunction<T, Throwable, U> fn): Hem sonucu hem de hatayı işler.
Örnek:
// Asenkron görev başlatma
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
try {
Thread.sleep(1000); // Uzun süren işlemin simülasyonu
} catch (InterruptedException e) {
throw new IllegalStateException(e);
}
return "Asenkron işlemin sonucu";
});
// Görev tamamlandıktan sonra işlem yapma (engellemeden)
future.thenAccept(result -> {
System.out.println("Alınan sonuç: " + result);
});
// Bir diğer işlem, ilkine bağlı
future.thenApply(String::toUpperCase)
.thenAccept(upperCaseResult -> {
System.out.println("Büyük harfli sonuç: " + upperCaseResult);
});
// Tüm görevlerin tamamlanmasını bekleme (gerçek uygulamalarda genellikle açıkça get/join kullanımı önlenir)
// future.join();
CompletableFuture, Java'da reaktif ve engellemeden çalışan kodlar yazmak için güçlü bir araçtır ve geleneksel Future arayüzüne kıyasla asenkron işlemlerle çalışma işini önemli ölçüde basitleştirir.