Sobes.tech
Junior

Callable və Runnable interfeysləri arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Runnable - bu, iplik tərəfindən icra edilə bilən vəzifəni təmsil edən funksional interfeysdir. Onun run() metodu var, hansı ki, arqument qəbul etmir1 və dəyər qaytarmır. Bu, arxa plan əməliyyatlarını yerinə yetirmək üçün istifadə olunur və nəticə tələb edilmir.

Callable - bu, eyni zamanda, iplik tərəfindən icra edilə bilən vəzifəni təmsil edən parametrli interfeysdir. Onun call() metodu var, hansı ki, ümumi <V> tipi (istənilən dəyər)2 qaytarır və istisna (Exception) ata bilər. Nəticəsindən istifadə olunmalı olan vəzifələr üçün uyğundur.

Əsas fərqlər:

Xüsusiyyət Runnable Callable
Qaytarılan dəyər Yox Bəli (tip {@code <V>})
İstisnalar Yox (metod {@code run}) Bəli (metod {@code call})
Metod {@code void run()} {@code V call() throws Exception}
İstifadə {@code java.lang.Runnable} {@code java.util.concurrent.Callable}

Runnable-ın istifadəsinə nümunə:

// Runnable-ın tətbiqi:
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Nəticə qaytarmadan əməliyyat yerinə yetir
        System.out.println("Runnable vəzifəsi icra olundu");
    }
};

// İplə işə salın:
new Thread(task).start();

Callable-ın istifadəsinə nümunə:

// Callable-ın tətbiqi:
Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        // Əməliyyatı yerinə yetir və nəticə qaytar:
        return "Callable vəzifəsi nəticə ilə icra olundu";
    }
};

// ExecutorService ilə işə salın:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);

try {
    // Nəticəni alın:
    String result = future.get();
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}