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