Назад к вопросам
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";
    }
}