Future.get()
Ждёт завершения задачи и возвращает её результат.
Доступно с: Java 1.5
Синтаксис
V get() throws InterruptedException, ExecutionException
V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutExceptionПараметры
| Параметр | Тип | Описание |
|---|---|---|
| timeout | long | Необязательный предел ожидания. |
| unit | TimeUnit | Единица времени для `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, обработка ошибок в задачах, тайм-ауты и закрытие пула.