Spec-Zone.ru › OpenJDK 25

Интерфейс Future<V>

Параметры типа:
V — тип результата, возвращаемого методом get этого Future
Все известные подинтерфейсы:
RunnableFuture<V>, RunnableScheduledFuture<V>, ScheduledFuture<V>
Все известные реализующие классы:
CompletableFuture, CountedCompleter, ForkJoinTask, FutureTask, RecursiveAction, RecursiveTask, SwingWorker
public interface Future<V>
Future представляет результат асинхронного вычисления. Предусмотрены методы для проверки завершения вычисления, ожидания его завершения и получения результата вычисления. Результат можно получить только с помощью метода get после завершения вычисления; при необходимости метод блокирует выполнение до готовности результата. Отмена выполняется методом cancel. Дополнительные методы позволяют определить, завершилась ли задача нормально или была отменена. После завершения вычисления отменить его нельзя. Если вы хотите использовать Future ради возможности отмены, но не предоставлять пригодный для использования результат, можно объявить типы вида Future<?> и возвращать null в качестве результата базовой задачи.

Пример использования (Обратите внимание, что все приведённые ниже классы вымышлены.)

interface ArchiveSearcher { String search(String target); }
class App {
  ExecutorService executor = ...;
  ArchiveSearcher searcher = ...;
  void showSearch(String target) throws InterruptedException {
    Callable<String> task = () -> searcher.search(target);
    Future<String> future = executor.submit(task);
    displayOtherThings(); // do other things while searching
    try {
      displayText(future.get()); // use future
    } catch (ExecutionException ex) { cleanup(); return; }
  }
}
Класс FutureTask является реализацией Future, реализующей Runnable, и поэтому может выполняться объектом Executor. Например, приведённую выше конструкцию с submit можно заменить на:
FutureTask<String> future = new FutureTask<>(task);
executor.execute(future);

Эффекты согласованности памяти: действия, выполняемые асинхронным вычислением, происходят до действий, выполняемых после соответствующего Future.get() в другом потоке.

Начиная с:
1.5
См. также:
  • FutureTask
  • Executor

Краткое описание вложенных классов

Модификатор и тип Интерфейс Описание
static enum  Future.State
Представляет состояние вычисления.

Краткое описание методов

Модификатор и тип Метод Описание
boolean cancel(boolean mayInterruptIfRunning)
Пытается отменить выполнение этой задачи.
default Throwable exceptionNow()
Возвращает исключение, выброшенное задачей, не дожидаясь её завершения.
V get()
При необходимости ожидает завершения вычисления, а затем возвращает его результат.
V get(long timeout, TimeUnit unit)
При необходимости ожидает завершения вычисления не более указанного времени, а затем возвращает его результат, если он доступен.
boolean isCancelled()
Возвращает true, если эта задача была отменена до её нормального завершения.
boolean isDone()
Возвращает true, если эта задача завершилась.
default V resultNow()
Возвращает вычисленный результат, не дожидаясь его получения.
default Future.State state()
Возвращает состояние вычисления.

Подробное описание методов

cancel

boolean cancel(boolean mayInterruptIfRunning)
Пытается отменить выполнение этой задачи. Этот метод не действует, если задача уже завершена или отменена либо её невозможно отменить по другой причине. В противном случае, если выполнение этой задачи ещё не началось к моменту вызова cancel, задача не должна запускаться. Если задача уже запущена, параметр mayInterruptIfRunning определяет, будет ли прерван поток, выполняющий эту задачу (если он известен реализации), в попытке остановить задачу.

Возвращаемое этим методом значение не обязательно указывает на то, что задача теперь отменена; используйте isCancelled().

Параметры:
mayInterruptIfRunning — true, если следует прервать поток, выполняющий эту задачу (если этот поток известен реализации); в противном случае выполняющимся задачам разрешается завершиться
Возвращает:
false, если задачу не удалось отменить, обычно потому, что она уже завершилась; в противном случае — true. Если два или более потоков пытаются отменить задачу, как минимум один из них возвращает true. Реализации могут предоставлять более строгие гарантии.

isCancelled

boolean isCancelled()
Возвращает true, если эта задача была отменена до её нормального завершения.
Возвращает:
true, если эта задача была отменена до завершения

isDone

boolean isDone()
Возвращает true, если эта задача завершилась. Завершение может быть результатом нормального окончания, исключения или отмены — во всех этих случаях метод возвращает true.
Возвращает:
true, если эта задача завершилась

get

V get() throws InterruptedException, ExecutionException
При необходимости ожидает завершения вычисления, а затем возвращает его результат.
Возвращает:
вычисленный результат
Выбрасывает:
CancellationException — если вычисление было отменено
ExecutionException — если при вычислении было выброшено исключение
InterruptedException — если текущий поток был прерван во время ожидания

get

V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
При необходимости ожидает завершения вычисления не более указанного времени, а затем возвращает его результат, если он доступен.
Параметры:
timeout — максимальное время ожидания
unit — единица измерения времени ожидания
Возвращает:
вычисленный результат
Выбрасывает:
CancellationException — если вычисление было отменено
ExecutionException — если при вычислении было выброшено исключение
InterruptedException — если текущий поток был прерван во время ожидания
TimeoutException — если время ожидания истекло

resultNow

default V resultNow()
Возвращает вычисленный результат, не дожидаясь его получения.

Этот метод предназначен для случаев, когда вызывающий код знает, что задача уже успешно завершилась, например при фильтрации потока объектов Future для выбора успешно завершившихся задач и использовании операции отображения для получения потока результатов.

    results = futures.stream()
               .filter(f -> f.state() == Future.State.SUCCESS)
               .map(Future::resultNow)
               .toList();
Требования к реализации:
Реализация по умолчанию вызывает isDone(), чтобы проверить, завершилась ли задача. Если она завершена, для получения результата вызывается get().
Возвращает:
вычисленный результат
Выбрасывает:
IllegalStateException — если задача не завершилась или завершилась без результата
Начиная с:
19

exceptionNow

default Throwable exceptionNow()
Возвращает исключение, выброшенное задачей, не дожидаясь её завершения.

Этот метод предназначен для случаев, когда вызывающий код знает, что задача уже завершилась с исключением.

Требования к реализации:
Реализация по умолчанию вызывает isDone(), чтобы проверить, завершилась ли задача. Если она завершена и не отменена, вызывается get(), а исключение ExecutionException перехватывается для получения исключения.
Возвращает:
исключение, выброшенное задачей
Выбрасывает:
IllegalStateException — если задача не завершилась, завершилась нормально или была отменена
Начиная с:
19

state

default Future.State state()
Возвращает состояние вычисления.
Требования к реализации:
Реализация по умолчанию использует isDone(), isCancelled() и get() для определения состояния.
Возвращает:
состояние вычисления
Начиная с:
19

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, в том числе концептуальные обзоры, определения терминов, обходные решения и рабочие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторское право © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/25/docs/api/java.base/java/util/concurrent/Future.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API