Java'da çoklu iş parçacığı, görevlerin eşzamanlı olarak yürütülmesine olanak tanır ve performansı ve yanıt verme hızını artırır. Geleneksel olarak geliştiriciler, görevleri tanımlamak için Runnable arayüzünü kullanırdı ancak bunun iki önemli sınırlaması vardır: bir sonuç döndüremez ve kontrol edilen istisnaları atamaz. Bunların üstesinden gelmek için Java, Java 5'te Callable ve Future arayüzlerini tanıttı.
Çağrılabilir Arayüz
Çağrılabilir arayüz sonuç döndüren ve bir istisna oluşturabilecek bir görevi temsil eder. Runnable'a benzer ancak bir değer döndürebildiği ve kontrol edilen istisnaları atabildiği için daha esnektir.
Javaimport java.util.concurrent.*; public class CallableExample { public static void main(String[] args) throws Exception { ExecutorService executor = Executors.newSingleThreadExecutor(); Callable<Integer> task = () -> { int sum = 0; for (int i = 1; i <= 5; i++) sum += i; return sum; // returns result }; Future<Integer> future = executor.submit(task); System.out.println('Result: ' + future.get()); executor.shutdown(); } }
Çıkış
Result: 15
Açıklama: Yürütücüye çağrılabilir bir görev gönderilir. 1'den 5'e kadar sayıların toplamını hesaplar ve sonucu döndürür. Sonuç, görev tamamlandıktan sonra Future.get() kullanılarak alınır.
Geleceğin Arayüzü
Gelecek arayüz eşzamansız bir hesaplamanın sonucunu temsil eder. Bir Callable veya Runnable görevini ExecutorService'e gönderdiğinizde, bir Future nesnesi döndürür.
Javaimport java.util.concurrent.*; public class CallableFutureExample { public static void main(String[] args) { ExecutorService executor = Executors.newSingleThreadExecutor(); Future<Integer> future = executor.submit(() -> 10 + 20); try { Integer result = future.get(); // waits but returns instantly System.out.println('Result: ' + result); } catch (Exception e) { e.printStackTrace(); } finally { executor.shutdown(); } } }
Çıkış
Result: 30
Açıklama: Callablegörev hesaplamaları10 + 2 and ExecutorService.submit()yöntem bir döndürürFuturenesne. Kullanmafuture.get()Hesaplama tamamlandığında sonucu alırız.
Çağrılabilir ve Gelecek
| Özellik | Aranabilir | Gelecek |
|---|---|---|
| Amaç | Sonuç döndüren bir görevi temsil eder | Eşzamansız bir görevin sonucunu temsil eder |
| İade Türü | Yürütüldüğünde bir sonuç döndürür | Bir Çağrılabilir tarafından döndürülen sonucu tutar |
| Tanımlandığı Yer | java.util.concurrent paketi | java.util.concurrent paketi |
| Uygulamak | ExecutorService'e gönderildi | ExecutorService.submit() tarafından döndürüldü |
| Yöntemler | Bir yöntem çağrısı var() | get() isDone() cancel() gibi yöntemlere sahiptir |
| İstisna İşleme | İşaretli istisnaları atabilir | Yürütmeden sonra sonuçları ve istisnaları yönetir |
| Kullanım | Neyin yürütüleceğini tanımlar | Kontrol eder, izler ve bir görevin sonucunu alır |