Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

ExecutorService.submit()

Отправляет задачу в пул и сразу возвращает `Future` для её результата.

Доступно с: Java 1.5

Синтаксис

<T> Future<T> submit(Callable<T> task)
Future<?> submit(Runnable task)

Параметры

ПараметрТипОписание
taskCallable<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, обработка ошибок в задачах, тайм-ауты и закрытие пула.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.