Класс FutureTask<V>
- Параметры типа:
V— тип результата, возвращаемого методамиgetэтого FutureTask
- Все реализуемые интерфейсы:
Runnable, Future<V>, RunnableFuture<V>
public class FutureTask<V> extends Object implements RunnableFuture<V>
Future с методами для запуска и отмены вычисления, проверки его завершения и получения результата. Результат можно получить только после завершения вычисления; методы get блокируют выполнение, если вычисление ещё не завершено. После завершения вычисление нельзя запустить повторно или отменить (если только оно не вызывается с помощью runAndReset()). Объект FutureTask можно использовать для обёртывания объекта Callable или Runnable. Поскольку FutureTask реализует Runnable, объект FutureTask можно передать в Executor для выполнения.
Помимо использования в качестве самостоятельного класса, этот класс предоставляет функциональность protected, которая может быть полезна при создании пользовательских классов задач.
- Начиная с версии:
- 1.5
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в интерфейсе Future
Future.State
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
FutureTask |
Создаёт объект FutureTask, который при запуске выполнит заданный Runnable и обеспечит возврат заданного результата методом get при успешном завершении. |
FutureTask |
Создаёт объект FutureTask, который при запуске выполнит заданный Callable. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
boolean |
cancel |
Пытается отменить выполнение этой задачи. |
protected void |
done() |
Защищённый метод, вызываемый при переходе этой задачи в состояние isDone (как при обычном завершении, так и при отмене). |
Throwable |
exceptionNow() |
Возвращает исключение, выброшенное задачей, не ожидая завершения. |
V |
get() |
При необходимости ожидает завершения вычисления, а затем возвращает его результат. |
V |
get |
При необходимости ожидает завершения вычисления не дольше заданного времени, а затем возвращает его результат, если он доступен. |
boolean |
isCancelled() |
Возвращает true, если эта задача была отменена до её обычного завершения. |
boolean |
isDone() |
Возвращает true, если эта задача завершена. |
V |
resultNow() |
Возвращает вычисленный результат, не ожидая завершения. |
void |
run() |
Устанавливает результатом этого Future результат вычисления, если Future не был отменён. |
protected boolean |
runAndReset() |
Выполняет вычисление, не устанавливая его результат, а затем сбрасывает этот Future в исходное состояние; операция не удаётся, если при вычислении возникает исключение или оно отменяется. |
protected void |
set |
Устанавливает для этого Future заданное значение, если значение ещё не было установлено и Future не был отменён. |
protected void |
setException |
Заставляет этот Future сообщить об исключении ExecutionException, указав заданную ошибку в качестве причины, если значение для Future ещё не было установлено и Future не был отменён. |
Future.State |
state() |
Возвращает состояние вычисления. |
String |
toString() |
Возвращает строковое представление этого FutureTask. |
Подробное описание конструкторов
FutureTask
public FutureTask(Callable<V> callable)
FutureTask, который при запуске выполнит заданный Callable.- Параметры:
-
callable— задача callable - Исключения:
-
NullPointerException— если callable равен null
FutureTask
public FutureTask(Runnable runnable, V result)
FutureTask, который при запуске выполнит заданный Runnable и обеспечит возврат заданного результата методом get при успешном завершении.- Параметры:
-
runnable— задача runnable -
result— результат, возвращаемый при успешном завершении. Если особый результат не требуется, рассмотрите возможность использования конструкции вида:Future<?> f = new FutureTask<Void>(runnable, null) - Исключения:
-
NullPointerException— если runnable равен null
Подробное описание методов
isCancelled
public boolean isCancelled()
Futuretrue, если эта задача была отменена до её обычного завершения.- Переопределяет:
-
isCancelledв интерфейсеFuture<V> - Возвращает:
-
true, если эта задача была отменена до завершения
isDone
public boolean isDone()
Futuretrue, если эта задача завершена. Завершение может произойти в результате обычного окончания, исключения или отмены — во всех этих случаях метод возвращает true.cancel
public boolean cancel(boolean mayInterruptIfRunning)
Futurecancel, она не должна быть запущена. Если задача уже запущена, параметр mayInterruptIfRunning определяет, будет ли прерван поток, выполняющий эту задачу (если реализация его отслеживает), в попытке остановить задачу. Возвращаемое этим методом значение не обязательно указывает на то, что задача теперь отменена; используйте Future.isCancelled().
- Переопределяет:
-
cancelв интерфейсеFuture<V> - Параметры:
-
mayInterruptIfRunning—true, если поток, выполняющий эту задачу, следует прервать (если реализация его отслеживает); в противном случае выполняющимся задачам разрешается завершиться - Возвращает:
-
false, если задачу не удалось отменить, обычно потому, что она уже завершена; в противном случае —true. Если два или более потока пытаются отменить задачу, как минимум один из них возвращаетtrue. Реализации могут предоставлять более строгие гарантии.
get
public V get() throws InterruptedException, ExecutionException
Future- Переопределяет:
-
getв интерфейсеFuture<V> - Возвращает:
- вычисленный результат
- Исключения:
-
CancellationException— если вычисление было отменено -
InterruptedException— если текущий поток был прерван во время ожидания -
ExecutionException— если при вычислении возникло исключение
get
public V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException
Future- Переопределяет:
-
getв интерфейсеFuture<V> - Параметры:
-
timeout— максимальное время ожидания -
unit— единица времени для аргумента тайм-аута - Возвращает:
- вычисленный результат
- Исключения:
-
CancellationException— если вычисление было отменено -
InterruptedException— если текущий поток был прерван во время ожидания -
ExecutionException— если при вычислении возникло исключение -
TimeoutException— если время ожидания истекло
resultNow
public V resultNow()
FutureЭтот метод предназначен для случаев, когда вызывающая сторона знает, что задача уже успешно завершена, например при фильтрации потока объектов Future для выбора успешно завершённых задач и использовании операции отображения для получения потока результатов.
results = futures.stream()
.filter(f -> f.state() == Future.State.SUCCESS)
.map(Future::resultNow)
.toList();
exceptionNow
public Throwable exceptionNow()
FutureЭтот метод предназначен для случаев, когда вызывающая сторона знает, что задача уже завершилась с исключением.
- Переопределяет:
-
exceptionNowв интерфейсеFuture<V> - Возвращает:
- исключение, выброшенное задачей
- Начиная с версии:
- 19
state
done
protected void done()
isDone (как при обычном завершении, так и при отмене). Реализация по умолчанию ничего не делает. Подклассы могут переопределить этот метод для вызова обратных вызовов завершения или выполнения служебных действий. Обратите внимание, что внутри реализации этого метода можно проверить состояние, чтобы определить, была ли эта задача отменена.set
protected void set(V v)
Этот метод вызывается внутри метода run() при успешном завершении вычисления.
- Параметры:
-
v— значение
setException
protected void setException(Throwable t)
ExecutionException, указав заданную ошибку в качестве причины, если значение для Future ещё не было установлено и Future не был отменён. Этот метод вызывается внутри метода run() при неудачном выполнении вычисления.
- Параметры:
-
t— причина сбоя
run
public void run()
RunnableFuture- Переопределяет:
-
runв интерфейсеRunnable - Переопределяет:
-
runв интерфейсеRunnableFuture<V>
runAndReset
protected boolean runAndReset()
- Возвращает:
-
trueпри успешном выполнении и сбросе
toString
public String toString()
- Переопределяет:
-
toStringв классеObject - Требования к реализации:
- Реализация по умолчанию возвращает строку, идентифицирующую этот FutureTask и его состояние завершения. Состояние в квадратных скобках содержит одну из строк
"Completed Normally","Completed Exceptionally","Cancelled"или"Not completed". - Возвращает:
- строковое представление этого FutureTask
© 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/FutureTask.html