Что возвращает интерфейс Callable в Java?

«Что возвращает интерфейс Callable в Java?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Интерфейс Callable<V> предназначен для представления задачи, которая возвращает результат типа V и может выбрасывать проверяемые исключения. Это его ключевое отличие от Runnable.

Сигнатура:

public interface Callable<V> {
    V call() throws Exception;
}

Пример использования с ExecutorService:

import java.util.concurrent.*;

public class CallableExample {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();

        // Создаем Callable, который возвращает String
        Callable<String> task = () -> {
            Thread.sleep(500);
            return "Результат вычисления: " + (10 * 10);
        };

        // Отправляем задачу на выполнение. submit() возвращает Future<String>
        Future<String> future = executor.submit(task);

        // Получаем результат (get() блокирует поток, пока задача не завершится)
        String result = future.get();
        System.out.println(result); // Результат вычисления: 100

        executor.shutdown();
    }
}
Сравнение с Runnable: Особенность Runnable Callable<V>
Возвращаемое значение void V (любой тип)
Исключения Не может выбрасывать проверяемые исключения Может выбрасывать Exception
Метод run() call()
Использование с ExecutorService execute() или submit() (возвращает Future<?>) submit() (возвращает Future<V>)

Callable — основа для возврата результатов из асинхронных задач в Java Concurrency API.