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

Параметры типа:
V - тип результата, возвращаемый методом get этого Future
Все известные подинтерфейсы:
RunnableFuture<V>, RunnableScheduledFuture<V>, ScheduledFuture<V>
Все известные реализующие классы:
CompletableFuture, CountedCompleter, ForkJoinTask, FutureTask, RecursiveAction, RecursiveTask, SwingWorker
public interface Future<V>

A 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

Методы

Модификатор и типМетодОписание
booleancancel​(boolean mayInterruptIfRunning)

Попытка отменить выполнение этой задачи.

Vget()

Ожидает завершения вычисления, если необходимо, и затем извлекает его результат.

Vget​(long timeout, TimeUnit unit)

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

booleanisCancelled()

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

booleanisDone()

Возвращает true, если эта задача завершилась.

Методы

cancel

boolean cancel(boolean mayInterruptIfRunning)

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

После возврата этого метода последующие вызовы isDone() всегда возвращают true. Последующие вызовы isCancelled() всегда возвращают true, если этот метод возвратил true.

Параметры:
mayInterruptIfRunning - true, если поток, выполняющий эту задачу, должен быть прерван; в противном случае текущие задачи могут завершиться
Возвращает:
false если задачу невозможно отменить, как правило, потому что она уже завершилась нормально; 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 - если ожидание истекло

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

Spec-Zone .ru
спецификации, руководства, описания, API