Sobes.tech
Junior

Koja je razlika između interfejsa Callable i Runnable?

sobes.tech АИ

Одговор од АИ

Runnable - је функционални интерфејс који представља задатак који може бити извршен од стране нити. Има метод run(), који не прихвата аргументе1 и не враћа вредности. Користи се за извршавање позадинских операција које не захтевају резултат.

Callable - је параметризовани интерфејс који такође представља задатак који може бити извршен од стране нити. Има метод call(), који враћа генерички тип <V> (слободну вредност)2 и може бацити изузетак (Exception). Погодан је за задатке чији резултат треба да се користи.

Главне разлике:

Карактеристика Runnable Callable
Враћена вредност Не Да (тип {@code <V>})
Изузеци Не (метод {@code run}) Да (метод {@code call})
Метод {@code void run()} {@code V call() throws Exception}
Коришћење {@code java.lang.Runnable} {@code java.util.concurrent.Callable}

Пример коришћења Runnable:

// Имплементација Runnable:
Runnable task = new Runnable() {
    @Override
    public void run() {
        // Извршава неку операцију без повратка резултата
        System.out.println("Runnable задатак извршен");
    }
};

// Покретање у току:
new Thread(task).start();

Пример коришћења Callable:

// Имплементација Callable:
Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        // Извршава операцију и враћа резултат:
        return "Callable задатак извршен са резултатом";
    }
};

// Извршавање помоћу ExecutorService:
ExecutorService executor = Executors.newSingleThreadExecutor();
Future<String> future = executor.submit(task);

try {
    // Добијање резултата:
    String result = future.get();
    System.out.println(result);
} catch (InterruptedException | ExecutionException e) {
    e.printStackTrace();
} finally {
    executor.shutdown();
}