Вопрос проверяет знание API ExecutorService и понимание различных моделей выполнения задач.
ExecutorService позволяет запускать задачи через execute, submit и методы пакетного выполнения. execute не возвращает результат. submit возвращает Future. Также есть методы для запуска нескольких задач одновременно. Выбор способа зависит от необходимости результата и обработки ошибок.
ExecutorService предоставляет несколько способов отправки задач на выполнение.
Метод execute:
принимает Runnable
не возвращает результат
исключения не передаются вызывающему коду
Пример:
executor.execute(() -> doWork());
Используется, когда:
результат не нужен
важна простота
Метод submit:
принимает Runnable или Callable
возвращает Future
позволяет получить результат или исключение
Пример:
Future<Integer> f = executor.submit(() -> calculate());
Метод invokeAll:
принимает коллекцию Callable
ждет завершения всех задач
возвращает список Future
Подходит для:
пакетной обработки
ожидания всех результатов
Метод invokeAny:
возвращает результат первой завершившейся задачи
остальные задачи могут быть отменены
Используется, когда:
достаточно одного успешного результата
fire-and-forget → execute
нужен результат → submit
batch-выполнение → invokeAll
Вывод: ExecutorService предоставляет гибкие способы запуска задач под разные сценарии выполнения.