目录
1.作用
在执行耗时较长任务的场景下,通过Future模式能够进行异步调用:即将该耗时任务通过子线程异步执行,而主程序执行其他任务,当子线程执行完成,通过Future模式获取该耗时任务的执行结果,提高执行效率
2.Java中Future模式的实现
定义了一个Future接口
public interface Future<V> {
/**
*尝试取消执行此任务
*/
boolean cancel(boolean mayInterruptIfRunning);
/**
* 如果此任务在正常完成之前被取消,则返回true
*/
boolean isCancelled();
/**
* 如果此任务已完成,则返回true
*/
boolean isDone();
/**
* 如果需要,等待计算完成,然后检索其结果
*/
V get() throws InterruptedException, ExecutionException;
/**
*如果需要,最多等待给定的时间以完成计算,然后检索其结果(如果可用)
*/
V get(long timeout, TimeUnit unit)
throws InterruptedException, ExecutionException, TimeoutException;
}
该接口的功能总结:
获取Future执行任务后的执行结果;
取消Future执行的任务
查看Future执行任务的状态(任务是否执行完毕)
3.Future接口的主要实现类
1.FutureTask
是Future接口的基本实现类,实现了接口功能的三个方法:
取消任务:
public boolean cancel(boolean mayInterruptIfRunning) {
if (!(state == NEW &&
UNSAFE.compareAndSwapInt(this, stateOffset, NEW,
mayInterruptIfRunning ? INTERRUPTING : CANCELLED)))
return false;
try { // in case call to interrupt throws exception
if (mayInterruptIfRunning) {
try {
Thread t = runner;
if (t != null)
t.interrupt();
} finally { // final state
UNSAFE.putOrderedInt(this, stateOffset, INTERRUPTED);
}
}
} finally {
finishCompletion();
}
return true;
}
查看任务执行状态:实现了Runable接口,从而能够将任务直接执行
获取任务执行结果:构造器中传入了Callable接口对象,能够存储call()方法的执行结果并返回
2.CompletableFuture
定义:实现了Future和CompletionStage接口
public class CompletableFuture<T> implements Future<T>, CompletionStage<T> {
}
作用:jdk1.8后引入的实现类,能够将多个异步任务串联形成复合调用:CompletionStage使得CompletableFuture能够将多个异步任务组合构形成异步调用