<代码> publicinterfaceFuture
1) <代码> booleancancel (booleanmayInterruptIfRunning): 代码>试图取消对此任务的执行。如果任务已完成,或已取消,或者由于某些其他原因而无法取消,则此尝试将失败。当调用取消时,如果调用成功,而此任务尚未启动,则此任务将永不运行。如果任务已经启动,则mayInterruptIfRunning参数确定是否应该以试图停止任务的方式来中断执行此任务的线程。此方法返回后,对结束()的后续调用将始终返回正确的。如果此方法返回真,则对isCancelled()的后续调用将始终返回真的。
2) <代码> booleanisCancelled():> 代码如果在任务正常完成前将其取消,则返回真的。
3) <代码> booleanisDone():> 代码如果任务已完成,则返回正确的。可能由于正常终止,异常或取消而完成,在所有这些情况中,此方法都将返回真的。
4) <代码> Vget () throwsInterruptedException ExecutionException> 代码:如有必要,等待计算完成,然后获取其结果。
5) <代码> Vget (longtimeout, TimeUnitunit) throwsInterruptedException中TimeoutException> 代码:如有必要,最多等待为使计算完成所给定的时间之后,获取其结果(如果结果可用)。
Future
公共接口Future{ 布尔取消(布尔mayInterruptIfRunning); 布尔isCancelled (); 布尔结束(); V get()抛出InterruptedException, ExecutionException; V获得(长超时,TimeUnit unit)抛出InterruptedException,中TimeoutException; }
方法解析:
Vget():获取异步执行的结果,如果没有结果可用,此方法会阻塞直到异步计算完成。
Vget (Longtimeout TimeUnitunit):获取异步执行结果,如果没有结果可用,此方法会阻塞,但是会有时间限制,如果阻塞时间超过设定的超时时间,该方法将抛出异常。
booleanisDone():如果任务执行结束,无论是正常结束或是中途取消还是发生异常,都返回真的。
booleanisCanceller():如果任务完成前被取消,则返回真的。
booleancancel (booleanmayInterruptRunning):如果任务还没开始,执行取消(…)方法将返回假;如果任务已经启动,执行取消(真正的)方法将以中断执行此任务线程的方式来试图停止任务,如果停止成功,返回正确的;当任务已经启动,执行取消(false)方法将不会对正在执行的任务线程产生影响(让线程正常执行到完成),此时返回假;当任务已经完成,执行取消(…)方法将返回false.mayInterruptRunning参数表示是否中断执行中的线程。
通过方法分析我们也知道实际上未来提供了3种功能:(1)能够中断执行中的任务(2)判断任务是否执行完成(3)获取任务执行完成后额结果。
但是我们必须明白未来只是一个接口,我们无法直接创建对象,因此就需要其实现类FutureTask登场啦。
FutureTask可用于异步获取执行结果或取消执行任务的场景。通过传入Runnable或者可调用的任务给FutureTask,直接调用其运行方法或者放入线程池执行,之后可以在外部通过FutureTask的得到方法异步获取执行结果,因此,FutureTask非常适合用于耗时的计算,主线程可以在完成自己的任务后,再去获取结果。另外,FutureTask还可以确保即使调用了多次运行方法,它都只会执行一次Runnable或者可调用的任务,或者通过取消取消FutureTask的执行等。
我们来看看FutureTask的实现
公开课FutureTask实现RunnableFuture {
FutureTask类实现了RunnableFuture接口,我们看一下RunnableFuture接口的实现:
公共接口RunnableFuture扩展了Runnable, Future { 空运行(); }