Интерфейс 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://download.java.net/java/early_access/jdk24/docs/api/java.base/java/util/concurrent/Future.html