Sobes.tech
Назад к вопросам
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();
    }
}