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