ExecutorService.submit()
Отправляет задачу в пул и сразу возвращает `Future` для её результата.
Доступно с: Java 1.5
Синтаксис
<T> Future<T> submit(Callable<T> task)
Future<?> submit(Runnable task)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| task | Callable<T> | Runnable | Задача: `Callable` возвращает результат, `Runnable` — нет. |
Возвращаемое значение
Future<T>Объект для получения результата позже.
Примеры
Задача с результатом и без:
void main() throws Exception {
try (var pool = Executors.newFixedThreadPool(2)) {
Future<String> greeting = pool.submit(() -> "Hello from the pool");
Future<?> job = pool.submit(() -> IO.println("side job"));
job.get();
IO.println(greeting.get());
IO.println(job.isDone());
}
}Результат:
side job
Hello from the pool
trueПримечания
Лямбда, которая возвращает значение, становится Callable, а лямбда без результата — Runnable. Callable может бросать проверяемые исключения; они придут в Future.get() обёрнутыми в ExecutionException. Для группы задач есть invokeAll().
См. также
- Future.get() — Ждёт завершения задачи и возвращает её результат.
- ExecutorService — Сервис, который выполняет задачи в пуле потоков.
- Runnable — Задача без аргументов и без результата.
Вопросы и ответы по теме
В учебнике
- Пулы потоков и ExecutorService — ExecutorService в Java — пулы потоков, submit, Callable и Future, invokeAll, обработка ошибок в задачах, тайм-ауты и закрытие пула.