实现异步编程,这个工具类你得掌握!
前言
最近看公司代码,多线程编程用的比较多,其中有对CompletableFuture的使用,所以想写篇文章总结下
在日常的Java8项目开发中,CompletableFuture是很强大的并行开发工具,其语法贴近java8的语法风格,与stream一起使用也能大大增加代码的简洁性
大家可以多应用到工作中,提升接口性能,优化代码
小伙伴们有兴趣想了解内容和更多相关学习资料的请点赞收藏+评论转发+关注我,后面会有很多干货。我有一些面试题、架构、设计类资料可以说是程序员面试必备!所有资料都整理到网盘了,需要的话欢迎下载!私信我回复【000】即可免费获取

基本介绍
CompletableFuture是Java 8新增的一个类,用于异步编程,继承了Future和CompletionStage
这个Future主要具备对请求结果独立处理的功能,CompletionStage用于实现流式处理,实现异步请求的各个阶段组合或链式处理,因此completableFuture能实现整个异步调用接口的扁平化和流式处理,解决原有Future处理一系列链式异步请求时的复杂编码

Future的局限性
1、Future 的结果在非阻塞的情况下,不能执行更进一步的操作
我们知道,使用Future时只能通过isDone()方法判断任务是否完成,或者通过get()方法阻塞线程等待结果返回,它不能非阻塞的情况下,执行更进一步的操作。
2、不能组合多个Future的结果
假设你有多个Future异步任务,你希望最快的任务执行完时,或者所有任务都执行完后,进行一些其他操作
3、多个Future不能组成链式调用
当异步任务之间有依赖关系时,Future不能将一个任务的结果传给另一个异步任务,多个Future无法创建链式的工作流。
4、没有异常处理
现在使用CompletableFuture能帮助我们完成上面的事情,让我们编写更强大、更优雅的异步程序
基本使用
创建异步任务
通常可以使用下面几个CompletableFuture的静态方法创建一个异步任务
public static CompletableFuture runAsync(Runnable runnable); //创建无返回值的异步任务
public static CompletableFuture runAsync(Runnable runnable, Executor executor); //无返回值,可指定线程池(默认使用ForkJoinPool.commonPool)
public static CompletableFuture supplyAsync(Supplier supplier); //创建有返回值的异步任务
public static CompletableFuture supplyAsync(Supplier supplier, Executor executor); //有返回值,可指定线程池
使用示例:
Executor executor = Executors.newFixedThreadPool(10);
CompletableFuture future = CompletableFuture.runAsync(() -> {//do something
}, executor);
int poiId = 111;
CompletableFuture future = CompletableFuture.supplyAsync(() -> {PoiDTO poi = poiService.loadById(poiId);return poi.getName();
});
// Block and get the result of the
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
