Назад к вопросам
Middle
223
questionbank
В чем отличие между интерфейсами Runnable и Callable в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Главное отличие в том, что Runnable не может вернуть результат и не может выбросить проверяемое исключение, тогда как Callable это может.
Runnable
- Метод
run():void run(); - Не возвращает значение.
- Не может выбросить проверяемое исключение (те, что наследуются от
Exception, кромеRuntimeException). - Подходит для задач, которые просто выполняются без возвращения результата.
Callable
- Метод
call():V call() throws Exception;(гдеV— тип возвращаемого значения). - Возвращает значение (тип указывается в
<V>). - Может выбросить проверяемое исключение.
- Часто используется с
ExecutorServiceиFutureдля асинхронного выполнения задач и получения их результатов.
Импользование в ExecutorService:
Runnableпередается вexecute(Runnable task)илиsubmit(Runnable task). МетодsubmitвозвращаетFuture<?>.Callableпередается вsubmit(Callable<T> task). МетодsubmitвозвращаетFuture<T>.
Пример Runnable:
// Пример Runnable
public class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("Runnable task running...");
}
}
Пример Callable:
// Пример Callable
import java.util.concurrent.Callable;
public class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
System.out.println("Callable task running...");
return "Task completed";
}
}