Java Callable. Краткое описание и пример использования

Java Callable. Краткое описание и пример использования

Последние несколько постов мы разбирались с потоками в Java. Сегодня мы продолжим тему многопоточности в Java и поговорим о Java Callable: разберем теорию и посмотрим пример использования. 

Очень часто при работе с потоками нам нужно получать какой-то результат и было бы очень удобно, чтобы поток сам возвращал результаты своей работы. Именно поэтому еще в Java 5 был введен интерфейс  java.util.concurrent.Callable. Он очень похож на интерфейс Runnable, но может вернуть результат в виде объекта Object и способен бросать исключения.

Интерфейс Callable использует дженерики для определения типа возвращаемого объекта. Класс Executors предоставляет полезные методы для выполнения Callable в пуле потоков. Callable таски (задачи) возвращают java.util.concurrent.Future объект. Используя Future мы можем узнать статус Callable таска и получить возвращенный объект. Это обеспечивает get() метод, который ждет завершение Callable, чтобы вернуть результат.

Future обеспечивает метод cancel() для отмены Callable таска. Есть перегруженный вариант метода get(), где мы можем указать время ожидания результата, это нужно для избежания блокировки текущего потока на длительное время. Также есть методы isDone() и isCancelled(), которые используются для получения статуса ассоциированного Callable таска.

Вот простой пример использования Callable таска, который возвращает имя потока. В примере используется Executor framework для одновременного выполнения 100 задач и Future, чтобы получить результат выполнения:

Результат выполнения программы (часть вывода):

В следующих статьях мы разберем Java FutureTask и ScheduledThreadPoolExecutor. Следите за обновлениями.

Комментарий “Java Callable. Краткое описание и пример использования

  1. Отличный подробный простой прозрачный пример. Спасибо большое, пойду сделаю себе чашечку такого же. 🙂

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *