java中的FutureTask类
一、概述
位于java.util.concurrent包下,类声明: public class FutureTask<V> extends Object implements RunnableFuture<V>
可取消的异步计算。利用开始和取消计算的方法、查询计算是否完成的方法和获取计算结果的方法,此类提供了对
Future
的基本实现。仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。
可使用 FutureTask 包装
Callable
或 Runnable
对象。因为
FutureTask 实现了 Runnable,所以可将 FutureTask 提交给
Executor
执行。
除了作为一个独立的类外,此类还提供了 protected 功能,这在创建自定义任务类时可能很有用。
二、构造方法
1、public FutureTask(Callable<V> callable)
创建一个 FutureTask,一旦运行就执行给定的
Callable
参数:
callable
- 可调用的任务。
抛出:
NullPointerException
- 如果 callable 为 null。
2、public
FutureTask(Runnable runnable,
V result)
创建一个
FutureTask,一旦运行就执行给定的 Runnable,并安排成功完成时 get 返回给定的结果 。
参数:runnable
- 可运行的任务。
result
- 成功完成时要返回的结果。如果不需要特定的结果,则考虑使用下列形式的构造:Future<?> f = new FutureTask<Object>(runnable, null)
抛出:NullPointerException
- 如果 runnable 为 null。
三、方法详细
三、方法详细
public boolean
isCancelled() 如果在任务正常完成前将其取消,则返回
true。1、
指定者:接口
Future<V>
中的
isCancelled
返回:如果任务完成前将其取消,则返回 true
2、public boolean isDone() 如果任务已完成,则返回 true。 可能由于正常终止、异常或取消而完成,在所有这些情况中,此方法都将返回 true。
返回:如果任务已完成,则返回 true
3、public boolean cancel(boolean mayInterruptIfRunning)
此方法返回后,对 Future.isDone()
的后续调用将始终返回
true。如果此方法返回 true,则对 Future.isCancelled()
的后续调用将始终返回
true。
- 参数:
mayInterruptIfRunning
- 如果应该中断执行此任务的线程,则为 true;否则允许正在运行的任务运行完成- 返回:
- 如果无法取消任务,则返回 false,这通常是由于它已经正常完成;否则返回 true
- 返回:
- 计算的结果
- 抛出:
CancellationException
- 如果计算被取消InterruptedException
- 如果当前的线程在等待时被中断ExecutionException
- 如果计算抛出异常
如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。
- 参数:
timeout
- 等待的最大时间unit
- timeout 参数的时间单位- 返回:
- 计算的结果
- 抛出:
CancellationException
- 如果计算被取消InterruptedException
- 如果当前的线程在等待时被中断ExecutionException
- 如果计算抛出异常TimeoutException
- 如果等待超时
7、protected void set(V v) 除非已经设置了此 Future 或已将其取消,否则将其结果设置为给定的值。在计算成功完成时通过 run 方法内部调用此方法。
8、protected void setException(Throwable t) 除非已经设置了此 Future 或已将其取消,否则它将报告一个 ExecutionException,并将给定的 throwable 作为其原因。在计算失败时通过 run 方法内部调用此方法。
9、public void run() 除非已将此 Future 取消,否则将其设置为其计算的结果。
10、protected boolean runAndReset()
- 执行计算而不设置其结果,然后将此 Future 重置为初始状态,如果计算遇到异常或已取消,则该操作失败。本操作被设计用于那些本质上要执行多次的任务。
-
-
- 返回:
- 如果成功运行并重置,则返回 true。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。