Sobes.tech
Назад к вопросам
Middle
409
questionbank

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

Ответ от нейросети

sobes.tech AI

Что хотят услышать интервьюеры:

Callable — это функциональный интерфейс для задач, которые выполняются в другом потоке и должны вернуть результат. В отличие от Runnable, он может возвращать значение и выбрасывать проверяемые исключения. Обычно используется вместе с ExecutorService через Future.

Определение:

Callable<V> — интерфейс из java.util.concurrent, который описывает задачу с методом V call() throws Exception.
Его применяют, когда нужно запустить вычисление асинхронно, получить результат и корректно обработать ошибки.
В отличие от Runnable, Callable не обязан быть void и может сообщать о проблемах через Exception.

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

import java.util.concurrent.*;

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

        Callable<Integer> task = () -> 2 + 3;

        Future<Integer> future = executor.submit(task);

        Integer result = future.get();
        System.out.println("Result: " + result);

        executor.shutdown();
    }
}

Пояснение кода:

  1. Создаётся ExecutorService, который будет выполнять задачу в отдельном потоке.
  2. Определяется Callable<Integer>, который возвращает число 5.
  3. Метод submit() принимает Callable и возвращает Future<Integer>.
  4. future.get() блокирует текущий поток, пока задача не завершится, и отдаёт результат.
  5. После завершения работы пул потоков закрывается через shutdown().

Ключевые моменты:

  • Callable используется для задач с результатом, Runnable — без результата.
  • Метод интерфейса: V call() throws Exception.
  • Callable обычно запускают через ExecutorService.submit().
  • Результат выполнения получают через Future.
  • Можно передавать проверяемые исключения, что удобно для задач с обработкой ошибок.
  • Часто применяется в многопоточности, асинхронных вычислениях и фоновых задачах.