目录
1.作用
2.Java中Future模式的实现
3.Future接口的主要实现类
1.FutureTask
2.CompletableFuture
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 exceptionif (mayInterruptIfRunning) {try {Thread t = runner;if (t != null)t.interrupt();} finally { // final stateUNSAFE.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能够将多个异步任务组合构形成异步调用