Encodera

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

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

Справочник Java

Future.get()

Ждёт завершения задачи и возвращает её результат.

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

Синтаксис

V get() throws InterruptedException, ExecutionException
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException

Параметры

ПараметрТипОписание
timeoutlongНеобязательный предел ожидания.
unitTimeUnitЕдиница времени для `timeout`.

Возвращаемое значение

VРезультат задачи.

Примеры

Результат и исключение из задачи:

void main() throws InterruptedException {
    try (var pool = Executors.newFixedThreadPool(2)) {
        Future<Integer> ok = pool.submit(() -> 6 * 7);
        Future<Integer> bad = pool.submit(() -> Integer.parseInt("x"));
        try {
            IO.println(ok.get());
            IO.println(bad.get());
        } catch (ExecutionException e) {
            IO.println("task failed: " + e.getCause());
        }
    }
}

Результат:

42
task failed: java.lang.NumberFormatException: For input string: "x"

Примечания

get() блокирует поток, пока результат не готов. Исключение из задачи приходит обёрнутым в ExecutionException, исходное доступно через getCause(). Версия с таймаутом бросает TimeoutException, если задача не успела.

См. также

  • ExecutorService.submit() — Отправляет задачу в пул и сразу возвращает `Future` для её результата.
  • CompletableFuture.join() — Ждёт результат `CompletableFuture`; ошибки приходят как непроверяемые исключения.
  • Thread.join() — Ждёт, пока поток завершится.

Вопросы и ответы по теме

В учебнике

  • Пулы потоков и ExecutorService — ExecutorService в Java — пулы потоков, submit, Callable и Future, invokeAll, обработка ошибок в задачах, тайм-ауты и закрытие пула.

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

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