【多线程开发 6】spring中的注解/API的线程问题

【多线程开发 6】spring中的注解/API的线程问题

2024年8月14日


除了Java自带默认线程池,基于Java的spring框架也有很多自带的默认线程池,有时候我们的一些需要线程池的操作可能通过提供的api和注解隐藏掉了,不熟悉的话会出现线程相关的问题

1 Future和CompletableFuture

Future和CompletableFuture都是Java提供的用来执行异步方法的情况。其中,Future只能包装一个异步任务,最后还是要把这个任务提交给特定线程池。

CompletableFuture则会使用默认线程池,但是比较复杂:

  • 无JVM参数前提下:

    若服务器的核心数小于等于2,commonParallelism 则为1,即useCommonPool 为false,new 一个线程池ThreadPerTaskExecutor 。

    若服务器的核心数大于2,commonParallelism 则为 核心数 - 1,即useCommonPool 为true,使用ForkJoinPool线程池。

  • 有JVM参数情况下:

    以设置参数为准。大于1小于等于32767。和上面判断一致

以上CompletableFuture的总结来自 这篇文章 从用法到源码再到应用场景:全方位了解CompletableFuture及其线程池 有兴趣深挖一下的可以看下

综上我们推荐使用CompletableFuture时候也需要主动指定线程池,没有指定线程池的情况下,CompletableFuture要么使用ForkJoinPool,要么不使用线程池,ForkJoinPool做CPU密集型任务好用,我们有时

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

艾迪的技术之路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值