Spec-Zone.ru › OpenJDK 17

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

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

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

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

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 - если ожидание истекло

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

Spec-Zone.ru

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