Интерфейсы 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