Интерфейс 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
- См. также:
Краткое описание вложенных классов
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static enum |
Future.State |
Представляет состояние вычисления. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
cancel |
Попытка отменить выполнение этой задачи. |
default Throwable |
exceptionNow() |
Возвращает исключение, выброшенное задачей, без ожидания. |
V |
get() |
Ожидает завершения вычисления, а затем извлекает его результат. |
V |
get |
Ожидает завершения вычисления не более заданного времени, а затем извлекает его результат, если он доступен. |
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