При работе с многопоточностью в Java, часто приходится сталкиваться с задачей создания отдельного потока. Для этого в Java существуют два основных интерфейса — Runnable и Callable. Чтобы понять, в каких случаях лучше использовать тот или иной интерфейс, необходимо знать их основные различия.
Интерфейс Runnable был представлен в Java с самого начала и его метод run()
не возвращает результат и не может бросить проверяемое исключение. Это делает Runnable удобным для простых задач, которые не требуют возвращения результата или обработки исключений. Например, если требуется просто запустить какую-то операцию в отдельном потоке.
Runnable runnable = () -> { System.out.println("Running in a separate thread"); }; new Thread(runnable).start();
Интерфейс Callable же был введен в Java 5 и представляет собой более универсальный инструмент для работы с потоками. Метод call()
этого интерфейса возвращает результат и может бросить проверяемое исключение. Это делает Callable более подходящим для сложных задач, где требуется обработка исключений и возвращение результата.
Callable<Integer> callable = () -> { return 123; }; FutureTask<Integer> futureTask = new FutureTask<>(callable); new Thread(futureTask).start();
Таким образом, выбор между Runnable и Callable зависит от конкретной задачи. Если требуется выполнить простую операцию в отдельном потоке без возвращения результата и обработки исключений, то лучше использовать Runnable. Если же требуется выполнить более сложную операцию с обработкой исключений и возвращением результата, то стоит выбирать Callable.
Добавить комментарий