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