Spec-Zone.ru › OpenJDK 21

Интерфейс 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

© 1993, 2023, 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/21/docs/api/java.base/java/util/concurrent/Future.html

Spec-Zone.ru

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