Интерфейс Future<V>
- Параметры типа:
-
V- тип результата, возвращаемый методомgetэтого Future
- Все известные подинтерфейсы:
- Response<T>, 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(final String target)
throws InterruptedException {
Future<String> future
= executor.submit(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
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<String>(new Callable<String>() {
public String call() {
return searcher.search(target);
}});
executor.execute(future); Эффекты согласованности памяти: Действия, выполняемые асинхронным вычислением предшествуют действиям, следующим за соответствующим Future.get() в другом потоке.
- С:
- 1.5
- См. также:
-
FutureTask,Executor
Методы
| Модификатор и тип | Метод и описание |
|---|---|
boolean |
cancel(boolean mayInterruptIfRunning) Попытка отменить выполнение этой задачи. |
V |
get() Ожидает завершения вычисления, если необходимо, и затем извлекает его результат. |
V |
get(long timeout,
TimeUnit unit) Ожидает завершения вычисления в течение заданного времени, если необходимо, и затем извлекает его результат, если он доступен. |
boolean |
isCancelled() Возвращает |
boolean |
isDone() Возвращает |
Методы
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.