Java
Callable ve Future
Callable ve Future ile sonuçlu görevleri öğrenirsin.
Callable ve Future
Callable<V>, sonuç döndüren bir görev arayüzüdür. Runnable'dan farklı olarak call() yöntemi bir değer döndürür ve Exception fırlatabilir. Future<V> ise sonucu zamanında almayı sağlar.
Callable<Integer> task = () -> 2 + 3;
Future<Integer> f = pool.submit(task);
Integer result = f.get();
get() görev bitene kadar bekler. get(timeout, unit) belirli bir süre sonra TimeoutException fırlatır. Bu, yanıtı olmayan görevleri engellemek için kullanılır. Hata durumunda ExecutionException alırsın; nedeni getCause() ile öğrenilir.
get ile zaman aşımı
Future.get(long, TimeUnit) belirli bir süre bekler; süre aşılırsa TimeoutException fırlatır. Bu, yanıtı olmayan görevleri engellemek için kullanılır.
try {
Integer r = f.get(1, TimeUnit.SECONDS);
} catch (TimeoutException e) {
f.cancel(true);
}
cancel(true) görevi bölerek iptal eder. Bu, uzun süren işlemlerde sistemi korur. isDone() ile görevin bitip bitmediğini sorgulayabilirsin. Bu denetimler, üretim eşzamanlı kodunda kritiktir.
Uygulama Callable ile sonuç al
Bir CallableDemo sınıfında main yaz; Executors.newSingleThreadExecutor() ile havuz oluştur. Callable<Integer> task = () -> 6 * 7 tanımla; pool.submit(task) ile Future<Integer> al. f.get() sonucunu System.out.println ile yazdır. Son olarak pool.shutdown() çağır.
Örnek çözümü göster
import java.util.concurrent.*;
class CallableDemo {
public static void main(String[] args) throws Exception {
ExecutorService pool = Executors.newSingleThreadExecutor();
Callable<Integer> task = () -> 6 * 7;
Future<Integer> f = pool.submit(task);
System.out.println(f.get());
pool.shutdown();
}
}
Kendini test et
-
Callable yöntemini tamamla
Callable<Integer> task = () -> 2 + 3;
Future<Integer> f = pool.submit(task);
Integer result = f.____();
Cevabı göster
Callable<Integer> task = () -> 2 + 3;
Future<Integer> f = pool.submit(task);
Integer result = f.get();
-
Future.get() çağrıldığında ne olur?
- Hemen sonuç döner
- Görevi yeniden başlatır
- Görevi iptal eder
- Görev bitene kadar çağırıcıyı bloklar
Cevabı göster
Görev bitene kadar çağırıcıyı bloklar — get() görev bitene kadar çağırıcıyı bloklar.
-
Callable/Future kavramlarını eşleştir
- Callable
- Sonuç döndüren görev
- Future
- Sonucu temsil eder
- get()
- Bekleyip sonucu alır
- cancel()
- Görevi iptal eder
Sıradaki ders: CompletableFuture