Назад к вопросам
Senior
4
Есть интерфейсы Callable и Runnable. Чем они отличаются? Почему по-разному называются?
Компании, где спрашивали
ИП Ганус Александр Андреевич
Ответ от нейросети
sobes.tech AI
Интерфейсы Runnable и Callable в Java используются для описания задач, которые могут выполняться в отдельных потоках, но имеют ключевые отличия:
-
Runnable:
- Метод
run()не возвращает результата и не выбрасывает проверяемых исключений. - Используется для задач, где не нужен результат выполнения.
- Сигнатура:
void run().
- Метод
-
Callable<V>:
- Метод
call()возвращает результат типаV. - Может выбрасывать проверяемые исключения.
- Используется, когда нужно получить результат работы задачи или обработать исключения.
- Сигнатура:
V call() throws Exception.
- Метод
Почему по-разному называются:
- Runnable — "то, что можно запустить" (run — запускать), акцент на выполнении без результата.
- Callable — "то, что можно вызвать" (call — вызывать), акцент на вызове с возвратом результата.
Пример использования Callable с ExecutorService:
import java.util.concurrent.*;
public class CallableExample {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newSingleThreadExecutor();
Callable<Integer> task = () -> {
// Некоторая вычислительная задача
return 123;
};
Future<Integer> future = executor.submit(task);
System.out.println("Результат: " + future.get());
executor.shutdown();
}
}