Sobes.tech
Junior

Callable ve Runnable arayüzleri arasındaki fark nedir?

sobes.tech yapay zeka

AI'dan gelen yanıt

Runnable - bu, bir iplik tarafından yürütülebilen görevi temsil eden fonksiyonel bir arayüzdür. Bir run() yöntemi vardır, bu yöntem argüman almaz1 ve değer döndürmez. Arka plan işlemlerini gerçekleştirmek için kullanılır ve sonuç gerekmez.

Callable - bu, aynı zamanda bir iplik tarafından yürütülebilen görevi temsil eden parametreli bir arayüzdür. Bir call() yöntemi vardır, bu yöntem genel bir <V> tipi (rastgele bir değer)2 döndürür ve bir istisna (Exception) atabilir. Sonuç kullanılacaksa uygundur.

Ana farklar:

Özellik Runnable Callable
Dönüş değeri Yok Evet (tip {@code <V>})
İstisnalar Yok (yöntem {@code run}) Evet (yöntem {@code call})
Yöntem {@code void run()} {@code V call() throws Exception}
Kullanım {@code java.lang.Runnable} {@code java.util.concurrent.Callable}

Runnable kullanımı örneği:

// Runnable uygulaması:
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Sonuç döndürmeden bir işlem gerçekleştir
        System.out.println("Runnable görevi yürütüldü");
    }
};

// Bir thread içinde çalıştır:
new Thread(task).start();

Callable kullanımı örneği:

// Callable uygulaması:
Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        // Bir işlem gerçekleştir ve sonuç döndür:
        return "Callable görevi sonuç ile yürütüldü";
    }
};

// ExecutorService ile çalıştır:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);

try {
    // Sonucu al:
    String result = future.get();
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}