Многопоточность

Чем Runnable отличается от Callable?


`Runnable` и `Callable` - это два интерфейса в Java, которые используются для выполнения задач в многопоточной среде, но есть некоторые различия между ними. `Runnable` является функциональным интерфейсом, определенным в пакете `java.lang` . Он имеет один метод `run()` , который выполняет задачу в отдельном потоке. Метод `run()` не возвращает результат и не генерирует исключения. Обычно `Runnable` используется с помощью класса `Thread` , который принимает `Runnable` в качестве аргумента конструктора. Пример использования `Runnable` : Runnable runnable = () -> { // выполнение задачи }; Thread thread = new Thread(runnable); thread.start(); `Callable` также является функциональным интерфейсом, определенным в пакете `java.util.concurrent` . Он имеет один метод `call()` , который выполняет задачу в отдельном потоке и возвращает результат. Метод `call()` может генерировать проверяемые исключения. `Callable` используется с помощью класса `ExecutorService` , который принимает `Callable` в качестве аргумента методов выполнения задач. Пример использования `Callable` : Callable<Integer> callable = () -> { // выполнение задачи return 42; // возвращаемый результат }; ExecutorService executorService = Executors.newSingleThreadExecutor(); Future<Integer> future = executorService.submit(callable); int result = future.get(); // получение результата executorService.shutdown(); Основные различия между `Runnable` и `Callable` : 1. `Runnable` не возвращает результат, в то время как `Callable` возвращает результат. 2. `Runnable` не генерирует проверяемые исключения, в то время как `Callable` может генерировать исключения. 3. `Runnable` используется с классом `Thread` , а `Callable` используется с классом `ExecutorService` . Выбор между `Runnable` и `Callable` зависит от требований вашей задачи. Если вам нужно только выполнить задачу без возврата результата, используйте `Runnable` . Если вам нужно выполнить задачу и получить результат, используйте `Callable` .


Копировать ссылку