CompletableFuture

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取出的时候会阻塞
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值