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();
}