CompletableFutures Oluşturma ve Tamamlama
supplyAsync, runAsync ve completedFuture kullanın; gelecekleri complete ve completeExceptionally ile el ile tamamlayın.
CompletableFutures Oluşturma ve Tamamlama, CoddyKit'te ücretsiz bir Java Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Java Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Java Academy kursu toplamda 4 dersten oluşur.
CompletableFuture Nedir?
CompletableFuture<T> (Java 8+), açıkça tamamlanabilen, zincirlenebilen ve birleştirilebilen eşzamansız bir hesaplamayı temsil eder. Hem Future hem de CompletionStage arayüzünü uygular.
supplyAsync: Eşzamansız Hesaplama Başlatma
CompletableFuture.supplyAsync(), common ForkJoinPool üzerinde bir Supplier çalıştırır ve sonucun geleceğini döndürür.
CompletableFuture<String> future = CompletableFuture.supplyAsync(() -> {
// runs on ForkJoinPool.commonPool()
return fetchDataFromNetwork();
});
System.out.println("Non-blocking — this runs immediately");runAsync: Çalıştır ve Unut
runAsync(), bir Runnable'ı eşzamansız olarak çalıştırır ve CompletableFuture<Void> döndürür. Sonuca ihtiyacınız olmadığında kullanın.
CompletableFuture<Void> task = CompletableFuture.runAsync(() ->
sendEmail("user@example.com", "Welcome!"));
task.thenRun(() -> System.out.println("Email sent"));Özel Yürütücü
Hesaplama için kullanılan iş parçacığı havuzunu denetlemek üzere özel bir Executor aktarın; bu, common pool'u engellemekten kaçınmak istediğiniz web uygulamalarında özellikle önemlidir.
ExecutorService pool = Executors.newFixedThreadPool(10);
CompletableFuture<User> future = CompletableFuture.supplyAsync(
() -> userService.findById(42L), pool
);completedFuture: Zaten Tamamlanmış Değer
CompletableFuture.completedFuture(value), zaten tamamlanmış bir gelecek döndürür. Sınama yaparken veya eşzamansız bir işlem hattında hemen döndürülecek bir değeriniz olduğunda kullanışlıdır.
CompletableFuture<String> cached = CompletableFuture.completedFuture("cached-value");
cached.thenAccept(System.out::println); // runs immediatelyBir Geleceği Elle Tamamlama
Sonucu hesaplamanın dışından sağlamak için complete() kullanın. Başarısızlığı bildirmek için completeExceptionally() kullanın.
CompletableFuture<String> promise = new CompletableFuture<>();
// In another thread or callback:
promise.complete("done!"); // signals success
// promise.completeExceptionally(new RuntimeException("fail")); // signals failure
String result = promise.get(); // blocks until completedget() ve join()
Hem get() hem de join(), gelecek tamamlanana kadar engeller. get() denetlenmiş istisnalar fırlatır; join() ise bunları denetlenmemiş CompletionException içine sarar.
try {
String r = future.get(5, TimeUnit.SECONDS); // checked exceptions
} catch (TimeoutException | InterruptedException | ExecutionException e) { ... }
// Or:
String r = future.join(); // throws CompletionException (unchecked)Engellemesiz Denetim için getNow()
getNow(defaultValue), gelecek zaten tamamlanmışsa sonucu, tamamlanmamışsa sağlanan varsayılan değeri döndürür; engelleme ve bekleme yapmaz.
String result = future.getNow("loading...");
System.out.println(result); // "loading..." if not yet doneisDone, isCancelled, isCompletedExceptionally
Engelleme yapmadan bir geleceğin durumunu kontrol edin. Bu kontrolleri yoklama döngülerinde veya izleme kodunda birleştirin.
if (future.isDone()) System.out.println("Completed");
if (future.isCancelled()) System.out.println("Cancelled");
if (future.isCompletedExceptionally()) System.out.println("Failed");Zaman Aşımını Yönetmek için cancel()
Devam eden bir hesaplamayı iptal etmek için cancel(true) çağrısını yapın. Gelecek iptal edilmiş durumuna geçer ve engelleyen tüm get() çağrıları CancellationException fırlatır.
CompletableFuture<String> future = fetchAsync();
ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
scheduler.schedule(() -> future.cancel(true), 3, TimeUnit.SECONDS);completeOnTimeout (Java 9+)
completeOnTimeout(value, timeout, unit), gelecek zaman aşımı süresi içinde tamamlanmamışsa onu otomatik olarak varsayılan bir değerle tamamlar; elle iptal etmeye göre daha temizdir.
CompletableFuture<String> result = fetchAsync()
.completeOnTimeout("default", 3, TimeUnit.SECONDS);
System.out.println(result.join()); // "default" if fetch took > 3sKısa Sınama
common ForkJoinPool üzerinde eşzamansız bir hesaplama başlatıp değer döndüren yöntem hangisidir?
Özet
supplyAsync / runAsync eşzamansız çalışmayı başlatır. complete / completeExceptionally elle tamamlar. Denetlenmemiş engelleme için join() kullanın. completeOnTimeout zaman aşımlarını temiz bir şekilde yönetir.
Sıkça Sorulan Sorular
“CompletableFutures Oluşturma ve Tamamlama” dersi ücretsiz mi?
Evet — “CompletableFutures Oluşturma ve Tamamlama” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Java Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Java Academy kursu toplamda 4 dersten oluşur.
“CompletableFutures Oluşturma ve Tamamlama” dersinde ne öğreneceğim?
supplyAsync, runAsync ve completedFuture kullanın; gelecekleri complete ve completeExceptionally ile el ile tamamlayın. Java Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Java Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Java Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.
“CompletableFutures Oluşturma ve Tamamlama” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Java Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Java Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- CompletableFutures Oluşturma ve Tamamlama
- thenApply ve thenCompose ile Zincirleme
- Gelecekleri Birleştirme: allOf ve anyOf
- Hata İşleme ve Eşzamansız HTTP İş Akışı