Java中的CompletableFuture使用解析
CompletableFuture常用方法
- CompletableFuture的join方法可以直接拿到返回值
- supplyAsync,开启异步任务
- thenCompose,接收前面的返回值,前面执行完了再执行后面的
- thenCombine,两个任务一起执行
- thenApply,把前面异步执行的结果,交给后面的异步任务,同一个线程
- thenApplyAsync,把前面的几个结果交给后面的异步任务,不同线程 和thenCompose 比较像
- applyToEither,要么,上个任务和这个任务一起运行,哪个任务先执行完,先返回哪个任务
- exceptionally,如果多个任务有一个出现异常,就会执行,这里的代码
- Stream表达式并行执行多任务
为什么CompletableFuture要定制化线程池,因为默认的线程池是ForkJoinPool,这个线程池的最大线程数默认是你的电脑的线程数数减1,假如我线程电脑是4核8线程的,ForkJoinPool的最大线程数就是7。
现在很多的电脑都是1个CPU2个线程,类似6核12线程,但是实际上某些任务场景下,可能还是只有6个线程执行,假如是这种任务,当我的任务数量大于7的时候,这个时候一波线程执行不完,部分线程需要执行2遍(实际上由于存在cpu的时间片机制,第7个任务会分配到其他各个cpu上执行,所以时间也不会突然暴增到2倍,这个时间增长是线性的)。
所以我们在自定义业务线程池的时候,也没有必要制定的很高。
// 查看处理器数量,4核8线程 System.out.println(Runtime.getRuntime().availableProcessors());
阻塞队列BlockingQueue
- 有容量大小
- 队列满了放不进去,put的时候会阻塞
- 队列空了取不出来,take取出的时候会阻塞
到此这篇关于Java中的CompletableFuture使用解析的文章就介绍到这了,更多相关CompletableFuture使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
基于Protobuf动态解析在Java中的应用 包含例子程序
下面小编就为大家带来一篇基于Protobuf动态解析在Java中的应用 包含例子程序。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2017-07-07MyEclipse整合ssh三大框架环境搭载用户注册源码下载
这篇文章主要为大家详细介绍了如何使用MyEclipse整合ssh三大框架进行环境搭载,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-10-10
最新评论