java中的FutureTask类

来源:互联网 发布:淘宝377日版官解 编辑:程序博客网 时间:2024/06/06 04:12

一、概述

位于java.util.concurrent包下,类声明: public classFutureTask<V> extends Object implements RunnableFuture<V>

可取消的异步计算。利用开始和取消计算的方法、查询计算是否完成的方法和获取计算结果的方法,此类提供了对 Future 的基本实现。仅在计算完成时才能获取结果;如果计算尚未完成,则阻塞 get 方法。一旦计算完成,就不能再重新开始或取消计算。

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

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


二、构造方法

1、public FutureTask(Callable<V> callable)   创建一个 FutureTask,一旦运行就执行给定的Callable

参数:callable - 可调用的任务。

抛出:NullPointerException - 如果 callable 为 null。

2、publicFutureTask(Runnable runnable,V result)   创建一个FutureTask,一旦运行就执行给定的 Runnable,并安排成功完成时 get 返回给定的结果 。

参数:runnable - 可运行的任务。

           result - 成功完成时要返回的结果。如果不需要特定的结果,则考虑使用下列形式的构造:Future<?> f = new FutureTask<Object>(runnable, null)

抛出:NullPointerException - 如果 runnable 为 null。 


三、方法详细

1、public booleanisCancelled()  如果在任务正常完成前将其取消,则返回true

指定者:接口Future<V> 中的isCancelled

返回:如果任务完成前将其取消,则返回true


2、public booleanisDone()  如果任务已完成,则返回true。 可能由于正常终止、异常或取消而完成,在所有这些情况中,此方法都将返回 true

指定者:接口Future<V> 中的isDone

返回:如果任务已完成,则返回true


3、public boolean cancel(boolean mayInterruptIfRunning)  

试图取消对此任务的执行。如果任务已完成、或已取消,或者由于某些其他原因而无法取消,则此尝试将失败。当调用 cancel 时,如果调用成功,而此任务尚未启动,则此任务将永不运行。如果任务已经启动,则mayInterruptIfRunning 参数确定是否应该以试图停止任务的方式来中断执行此任务的线程。

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

指定者:
接口 Future<V> 中的cancel
参数:
mayInterruptIfRunning - 如果应该中断执行此任务的线程,则为 true;否则允许正在运行的任务运行完成
返回:
如果无法取消任务,则返回 false,这通常是由于它已经正常完成;否则返回 true
4、public Vget() throwsInterruptedException,ExecutionException  


如有必要,等待计算完成,然后获取其结果。

指定者:
接口 Future<V> 中的get
返回:
计算的结果
抛出:
CancellationException - 如果计算被取消
InterruptedException - 如果当前的线程在等待时被中断
ExecutionException - 如果计算抛出异常
5、public Vget(long timeout, TimeUnit unit)throwsInterruptedException, ExecutionException,TimeoutException

如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。

指定者:
接口 Future<V> 中的get
参数:
timeout - 等待的最大时间
unit - timeout 参数的时间单位
返回:
计算的结果
抛出:
CancellationException - 如果计算被取消
InterruptedException - 如果当前的线程在等待时被中断
ExecutionException - 如果计算抛出异常
TimeoutException - 如果等待超时
6、protected void done()  当此任务转换到状态isDone(不管是正常地还是通过取消)时,调用受保护的方法。默认实现不执行任何操作。子类可以重写此方法,以调用完成回调或执行簿记。注意,可以查询此方法的实现内的状态,从而确定是否已取消了此任务。


7、protected voidset(V v)  除非已经设置了此 Future 或已将其取消,否则将其结果设置为给定的值。在计算成功完成时通过run 方法内部调用此方法。 


8、protected voidsetException(Throwable t)  除非已经设置了此 Future 或已将其取消,否则它将报告一个ExecutionException,并将给定的 throwable 作为其原因。在计算失败时通过 run 方法内部调用此方法。 


9、public voidrun()  除非已将此 Future 取消,否则将其设置为其计算的结果。


10、protected booleanrunAndReset()  

执行计算而不设置其结果,然后将此 Future 重置为初始状态,如果计算遇到异常或已取消,则该操作失败。本操作被设计用于那些本质上要执行多次的任务。

返回:
如果成功运行并重置,则返回 true。








0 0
原创粉丝点击