一、基础
Future:Future接口定义了操作异步任务执行的方法,如获取任异步任务的执行结果、取消异步任务的执行、判断任务执行是否完毕等。
Callable:Callable接口定义了需要有返回结果的任务需要实现的方法。
二、Future的缺点。
阻塞。必须手动futureTask.get()查询执行结果,这样会造成阻塞,导致线程卡在get()方法处,等待返回结果,无法继续执行后续代码。
解决方法:
1、尽量使用带超时参数的get()方法。
2、isDone()轮询是否结束,再调用get()。
三、CompletableFuture
public class CompletableFuture<T> implements Future<T>, CompletionStage<T>
CompletionStage,代表异步计算过程中的某一个节点,一个阶段完成以后可以会触发另外一个阶段。
一个阶段的计算执行可以是一个Function、Consumer或者Runnable。
一个阶段的执行可能被单个阶段的完成触发,也可能时由多个阶段一起触发。