Sobes.tech
Junior

Ի՞նչ է տարբերությունը Callable և Runnable ինտերֆեյսների միջև։

sobes.tech AI

Պատասխան AI-ից

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 task executed");
    }
};

// Запускаем в потоке:
new Thread(task).start();

Օրինակ Callable-ի օգտագործման:

// Реализация Callable:
Callable<String> task = new Callable<String>() {
    @Override
    public String call() throws Exception {
        // Выполняем операцию и возвращаем результат:
        return "Callable task executed with result";
    }
};

// Запускаем с помощью 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();
}