Найти в Дзене
DEBAGanov

Java 1064. Чем отличаются два интерфейса Runnable и Callable?

Интерфейсы Runnable и Callable в Java представляют два различных способа для создания многопоточных задач, которые могут быть выполнены другими потоками.

Runnable:

  • Определен в пакете java.lang.
  • Представляет простую функциональность, которая может быть выполнена параллельно.
  • Имеет единственный метод void run(), который не принимает аргументов и не возвращает результат.
  • Метод run() содержит код, который будет выполняться в отдельном потоке.
  • Когда объект Runnable передается в конструктор класса Thread, он становится исполняемым кодом этого потока.
  • Не возвращает результат или выбрасывает проверяемое исключение.

Callable:

  • Определен в пакете java.util.concurrent.
  • Появился в Java 5 и представляет более мощную альтернативу Runnable.
  • Подобно Runnable, он представляет задачу, которую можно выполнить параллельно.
  • Отличие заключается в том, что Callable может возвращать результат и выбрасывать исключения.
  • Имеет единственный метод V call() throws Exception, который возвращает значение типа V (обобщенный тип) и может выбрасывать исключения.
  • Метод call() содержит код, который будет выполняться в отдельном потоке.
  • Когда объект Callable передается в ExecutorService и запускается с помощью метода submit(), он возвращает объект Future, который представляет результат выполнения задачи.
  • Объект Future позволяет получить результат выполнения задачи, проверить ее статус и отменить ее выполнение.
  • Использование Runnable или Callable зависит от требуемой функциональности и потребностей вашего приложения. Если вам необходимо только выполнить некоторый код в параллельном потоке без возвращаемого значения или выбрасываемых исключений, то можно использовать Runnable. Если вам нужно получить результат выполнения задачи или обрабатывать исключения, то более подходящим будет использование Callable.

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov