Java中的CompletableFuture使用解析

 更新时间:2024年01月18日 10:30:25   作者:岸河  
这篇文章主要介绍了Java中的CompletableFuture使用解析,为什么CompletableFuture要定制化线程池,因为默认的线程池是ForkJoinPool,这个线程池的最大线程数默认是你的电脑的线程数数减1,假如我线程电脑是4核8线程的,ForkJoinPool的最大线程数就是7,需要的朋友可以参考下

CompletableFuture常用方法

  • CompletableFuture的join方法可以直接拿到返回值
  • supplyAsync,开启异步任务
  • thenCompose,接收前面的返回值,前面执行完了再执行后面的
  • thenCombine,两个任务一起执行
  • thenApply,把前面异步执行的结果,交给后面的异步任务,同一个线程
  • thenApplyAsync,把前面的几个结果交给后面的异步任务,不同线程 和thenCompose 比较像
  • applyToEither,要么,上个任务和这个任务一起运行,哪个任务先执行完,先返回哪个任务
  • exceptionally,如果多个任务有一个出现异常,就会执行,这里的代码
  • Stream表达式并行执行多任务

image.png

为什么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使用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java中打jar包以及如何调用包方法演示

    Java中打jar包以及如何调用包方法演示

    这篇文章主要给大家介绍了关于Java中打jar包以及如何调用包的相关资料,jar包的全称是java archive,jar包本质就是一种压缩包,在Java开发中一般是用来压缩类的一个包,需要的朋友可以参考下
    2023-09-09
  • java和Spring中观察者模式的应用详解

    java和Spring中观察者模式的应用详解

    这篇文章主要介绍了java和Spring中观察者模式的应用,,具有一定的参考价值,感兴趣的可以了解一下,希望能够给你带来帮助
    2021-10-10
  • Java中的WeakHashMap源码分析

    Java中的WeakHashMap源码分析

    这篇文章主要介绍了Java中的WeakHashMap源码分析,WeakHashMap可能平时使用的频率并不高,但是你可能听过WeakHashMap会进行自动回收吧,下面就对其原理进行分析,需要的朋友可以参考下
    2023-09-09
  • mybatis中字段名与关键字相同问题

    mybatis中字段名与关键字相同问题

    这篇文章主要介绍了mybatis中字段名与关键字相同问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-02-02
  • spring中aop的xml配置方法实例详解

    spring中aop的xml配置方法实例详解

    AOP的配置方式有2种方式:xml配置和AspectJ注解方式。下面这篇文章主要给大家介绍了关于spring中aop的xml配置方法的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • java处理按钮点击事件的方法

    java处理按钮点击事件的方法

    下面小编就为大家带来一篇java处理按钮点击事件的方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Spring Data JPA进行数据分页与排序的方法

    Spring Data JPA进行数据分页与排序的方法

    这篇文章主要介绍了Spring Data JPA进行数据分页与排序的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Springboot上传excel并将表格数据导入或更新mySql数据库的过程

    Springboot上传excel并将表格数据导入或更新mySql数据库的过程

    这篇文章主要介绍了Springboot上传excel并将表格数据导入或更新mySql数据库的过程 ,本文以Controller开始,从导入过程开始讲述,其中包括字典表的转换,需要的朋友可以参考下
    2018-04-04
  • Java详细讲解分析双指针法的使用

    Java详细讲解分析双指针法的使用

    严格的来说,双指针只能说是是算法中的一种技巧。双指针指的是在遍历对象的过程中,不是普通的使用单个指针进行访问,而是使用两个相同方向(快慢指针)或者相反方向(对撞指针)的指针进行扫描,从而达到相应的目的
    2022-04-04
  • 使用XSD校验Mybatis的SqlMapper配置文件的方法(2)

    使用XSD校验Mybatis的SqlMapper配置文件的方法(2)

    这篇文章主要介绍了使用XSD校验Mybatis的SqlMapper配置文件的方法(2)的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-11-11

最新评论