Module java.base

Class FutureTask<V>

java.lang.Object
java.util.concurrent.FutureTask<V>
类型参数:
V - 由此FutureTask的get方法返回的结果类型
所有实现的接口:
Runnable, Future<V>, RunnableFuture<V>

public class FutureTask<V> extends Object implements RunnableFuture<V>
可取消的异步计算。此类提供了Future的基本实现,具有启动和取消计算的方法,查询计算是否完成的方法,以及检索计算结果的方法。只有在计算完成时才能检索结果;如果计算尚未完成,则get方法将阻塞。一旦计算完成,计算就无法重新启动或取消(除非使用runAndReset()调用计算)。

FutureTask可以用来包装CallableRunnable对象。因为FutureTask实现了Runnable,所以可以将FutureTask提交给Executor执行。

除了作为独立类使用外,此类还提供了可能在创建自定义任务类时有用的protected功能。

自 JDK 版本:
1.5
  • Nested Class Summary

    Nested classes/interfaces declared in interface java.util.concurrent.Future

    Future.State
  • Constructor Summary

    Constructors
    Constructor
    Description
    FutureTask(Runnable runnable, V result)
    创建一个FutureTask,在运行时执行给定的Runnable,并安排get在成功完成时返回给定的结果。
    FutureTask(Callable<V> callable)
    创建一个FutureTask,在运行时执行给定的Callable
  • Method Summary

    Modifier and Type
    Method
    Description
    boolean
    cancel(boolean mayInterruptIfRunning)
    尝试取消此任务的执行。
    protected void
    done()
    当此任务转换为状态isDone(无论是正常完成还是通过取消)时调用的受保护方法。
    V
    get()
    必要时等待计算完成,然后检索其结果。
    V
    get(long timeout, TimeUnit unit)
    必要时等待最多给定时间以使计算完成,然后检索其结果(如果可用)。
    boolean
    如果此任务在正常完成之前被取消,则返回true
    boolean
    isDone()
    如果此任务已完成,则返回true
    void
    run()
    将此Future设置为其计算的结果,除非已取消。
    protected boolean
    执行计算而不设置其结果,然后将此future重置为初始状态,如果计算遇到异常或被取消,则无法执行此操作。
    protected void
    set(V v)
    将此future的结果设置为给定值,除非此future已经设置或已取消。
    protected void
    使此future报告具有给定throwable作为原因的ExecutionException,除非此future已经设置或已取消。
    返回此FutureTask的字符串表示形式。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

    Methods declared in interface java.util.concurrent.Future

    exceptionNow, resultNow, state
  • Constructor Details

    • FutureTask

      public FutureTask(Callable<V> callable)
      创建一个FutureTask,在运行时执行给定的Callable
      参数:
      callable - 可调用任务
      抛出:
      NullPointerException - 如果可调用为null
    • FutureTask

      public FutureTask(Runnable runnable, V result)
      创建一个FutureTask,在运行时执行给定的Runnable,并安排get在成功完成时返回给定的结果。
      参数:
      runnable - 可运行任务
      result - 成功完成时要返回的结果。如果不需要特定结果,请考虑使用以下形式的构造:Future<?> f = new FutureTask<Void>(runnable, null)
      抛出:
      NullPointerException - 如果可运行为null
  • Method Details

    • isCancelled

      public boolean isCancelled()
      从接口复制的描述: Future
      如果此任务在正常完成之前被取消,则返回true
      指定者:
      isCancelled 在接口 Future<V>
      返回:
      如果此任务在完成之前被取消,则返回true
    • isDone

      public boolean isDone()
      从接口复制的描述: Future
      如果此任务已完成,则返回true。完成可能是由于正常终止、异常或取消 - 在所有这些情况下,此方法将返回true
      指定者:
      isDone 在接口 Future<V>
      返回:
      如果此任务已完成,则返回true
    • cancel

      public boolean cancel(boolean mayInterruptIfRunning)
      从接口复制的描述: Future
      尝试取消此任务的执行。如果任务已经完成或取消,或者由于其他原因无法取消,则此方法不起作用。否则,如果在调用cancel时任务尚未启动,则此任务不应运行。如果任务已经启动,则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 - 如果等待超时
    • done

      protected void done()
      当此任务转换为状态isDone(无论是正常完成还是通过取消)时调用的受保护方法。默认实现不执行任何操作。子类可以重写此方法以调用完成回调或执行簿记。请注意,您可以在此方法的实现内部查询状态,以确定此任务是否已取消。
    • set

      protected void set(V v)
      将此future的结果设置为给定值,除非此future已经设置或已取消。

      此方法在计算成功完成时由run()方法内部调用。

      参数:
      v - 值
    • setException

      protected void setException(Throwable t)
      使此Future报告一个ExecutionException,其原因是给定的throwable,除非此Future已经被设置或已被取消。

      除非计算失败,否则此方法会在run()方法内部调用。

      参数:
      t - 失败的原因
    • run

      public void run()
      从接口复制的描述: RunnableFuture
      将此Future设置为其计算结果,除非它已被取消。
      指定者:
      run 在接口 Runnable
      指定者:
      run 在接口 RunnableFuture<V>
    • runAndReset

      protected boolean runAndReset()
      执行计算而不设置其结果,然后将此Future重置为初始状态,如果计算遇到异常或被取消,则无法执行此操作。这适用于本质上执行多次的任务。
      返回值:
      true 如果成功运行并重置
    • toString

      public String toString()
      返回此FutureTask的字符串表示形式。
      覆盖:
      toString 在类 Object
      实现要求:
      默认实现返回一个标识此FutureTask及其完成状态的字符串。状态在括号中包含以下字符串之一:"Completed Normally""Completed Exceptionally""Cancelled" "Not completed"
      返回值:
      此FutureTask的字符串表示形式