Module  java.base
软件包  java.util.concurrent

Class FutureTask<V>

  • 参数类型
    V - 该FutureTask的 get方法返回的结果类型
    All Implemented Interfaces:
    RunnableFuture<V>RunnableFuture<V>
    已知直接子类:
    Task


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

    A FutureTask可用于包装CallableRunnable对象。 因为FutureTask实现Runnable ,一个FutureTask可以提交给一个Executor执行。

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

    从以下版本开始:
    1.5
    • 构造方法摘要

      构造方法  
      Constructor 描述
      FutureTask​(Runnable runnable, V result)
      创建一个 FutureTask ,将在运行时执行给定的 Runnable ,并安排 get将在成功完成后返回给定的结果。
      FutureTask​(Callable<V> callable)
      创建一个 FutureTask ,它将在运行时执行给定的 Callable
    • 方法摘要

      所有方法  接口方法  具体的方法 
      Modifier and Type 方法 描述
      boolean cancel​(boolean mayInterruptIfRunning)
      尝试取消执行此任务。
      protected void done​()
      此任务转换到状态 isDone (无论是正常还是通过取消)调用的受保护方法。
      V get​()
      等待计算完成,然后检索其结果。
      V get​(long timeout, TimeUnit unit)
      如果需要等待最多在给定的时间计算完成,然后检索其结果(如果可用)。
      boolean isCancelled​()
      如果此任务在正常完成之前被取消,则返回 true
      boolean isDone​()
      如果此任务完成,则返回 true
      void run​()
      将此未来设置为其计算结果,除非已被取消。
      protected boolean runAndReset​()
      执行计算而不设置其结果,然后将此将来重置为初始状态,如果计算遇到异常或被取消,则不执行此操作。
      protected void set​(V v)
      将此未来的结果设置为给定值,除非此未来已被设置或已被取消。
      protected void setException​(Throwable t)
      导致这个未来报告一个ExecutionException作为其原因,除非这个未来已经被设置或已被取消。
    • 构造方法详细信息

      • FutureTask

        public FutureTask​(Callable<V> callable)
        创建一个 FutureTask ,它将在运行时执行给定的 Callable
        参数
        callable - 可调用任务
        异常
        NullPointerException - 如果可调用为空
      • FutureTask

        public FutureTask​(Runnable runnable,
                          V result)
        创建一个 FutureTask ,它将在运行时执行给定的 Runnable ,并安排 get将在成功完成后返回给定的结果。
        参数
        runnable - 可运行的任务
        result - 成功完成后返回的结果。 如果您不需要特定的结果,请考虑使用以下形式的结构: Future<?> f = new FutureTask<Void>(runnable, null)
        异常
        NullPointerException - 如果runnable为null
    • 方法详细信息

      • isCancelled

        public boolean isCancelled​()
        说明从接口Future复制
        如果此任务在正常完成之前被取消,则返回 true
        Specified by:
        isCancelled在接口 Future<V>
        结果
        true如果此任务在完成之前被取消
      • isDone

        public boolean isDone​()
        说明从接口Future复制
        如果此任务完成,则返回true 完成可能是由于正常终止,异常或取消 - 在所有这些情况下,此方法将返回true
        Specified by:
        isDone在接口 Future<V>
        结果
        true如果此任务完成
      • cancel

        public boolean cancel​(boolean mayInterruptIfRunning)
        描述从接口Future复制
        尝试取消执行此任务。 如果任务已经完成,已经被取消或由于某种其他原因而无法取消,则此尝试将失败。 如果成功,并且当cancel时此任务尚未启动,则此任务不应运行。 如果任务已经开始,则mayInterruptIfRunning参数确定执行此任务的线程是否应该中断以试图停止任务。

        此方法返回后,对Future.isDone()后续调用将始终返回true 对后续调用Future.isCancelled()总是返回true如果此方法返回true

        Specified by:
        cancel在接口 Future<V>
        参数
        mayInterruptIfRunning - true如果执行该任务的线程应该被中断; 否则,正在进行的任务被允许完成
        结果
        false如果任务无法取消,通常是因为它已经正常完成; 否则为true
      • done

        protected void done​()
        此任务转换到状态isDone (无论是正常还是通过取消)调用的受保护方法。 默认实现什么都不做。 子类可以覆盖此方法来调用完成回调或执行簿记。 请注意,您可以在执行此方法之前查询状态,以确定此任务是否已被取消。
      • set

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

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

        参数
        v - 值
      • setException

        protected void setException​(Throwable t)
        导致这个未来报告一个ExecutionException与给定的可抛弃的原因,除非这个未来已经被设置或已被取消。

        该方法在计算失败时由run()方法内部调用。

        参数
        t - 失败的原因
      • runAndReset

        protected boolean runAndReset​()
        执行计算而不设置其结果,然后将此将来重置为初始状态,如果计算遇到异常或被取消,则不执行此操作。 这被设计用于内在地执行多次的任务。
        结果
        true如果成功运行并重置