1、Runnable接口(只有一个run函数,该函数没有返回值)
2、Callable接口(只有一个call函数,该函数有返回值)
3、Future接口(Executor就是Runnable和Callable的调度容器)对具体的Runnable或者Callable任务的执行结果进行取消、查询是否完成、获取结果、设置结果等操作
4、RunnableFuture接口(对Runnable和Future继承的一个接口)常用实现类:FutureTask
FutureTask的构造函数会把Runnable类型转成Callable类型,所以FutureTask最终都是执行Callable类型的任务
5、CompletionStage接口(Java8新增接口,用于异步执行中的阶段处理)CompletableFuture对Future的扩展增强
(1)在上一阶段执行结束之后,一阶段结果作为指定函数的参数执行函数产生新的结果
eg:CompletableFuture.supplyAsycn(()- > { }, asyncTaskExecutor).thenApply /thenCombine/ applyToEither;
(2)在上一阶段执行结束之后,一阶段结果作为指定函数的参数执行函数,accept方法
eg:CompletableFuture.supplyAsycn(()- > { }, asyncTaskExecutor).thenAccept /thenAccptBoth/ acceptEither;
(3)在上一阶段执行结束之后,不依赖一阶段执行结果,执行指定的操作,run方法接口参数为Runnable类型
eg:CompletableFuture.supplyAsycn(()- > { }, asyncTaskExecutor).thenRun /runAfterBoth/ RunAfterEither;
关键词:
apply:上阶段结果作下阶段参数继续执行并返回结果
accept:上阶段结果作下阶段参数继续执行不返回结果
run:上阶段执行完比下阶段执行
async:异步执行,指定或者不指定线程池
both:前两阶段同时执行完毕执行下一阶段
either:前两阶段任一执行完毕执行下一阶段
combine:类似apply,但下一阶段执行的必须是BiFunction
compose:基于上阶段的执行完状态,执行下一阶段
complete:基于上阶段的执行完状态和结果,消费其结果
handler:基于上阶段的执行完状态和结果,消费其正常或者异常结果
exceptionally:消费异常结果
常用于接口并行计算,优化接口。
CompletableFuture可以指定异步处理流程:
thenAccept()处理正常结果;
exceptional()处理异常结果;
thenApplyAsync()用于串行化另一个CompletableFuture
anyOf()和allOf()用于并行化多个CompletableFuture
在CompletableFuture执行Task的时候,是需要使用线程池还是用当前的线程去执行。这个需要根据具体的情况来定。使用的时候要尽可能的小心。java中Runnable、Callable、Future、RunnableFuture、CompletionStage接口区别
留言与评论(共有 0 条评论) “” |