SpringBoot中@Async异步多线程使用

本文介绍了SpringBoot中@Async注解的使用,包括默认线程池和自定义线程池的配置。同时,文章讨论了@Async失效的常见原因,如未开启异步配置、异步方法与调用者在同一类中、返回值类型限制及静态方法使用等问题,强调了正确使用异步方法的关键点。
摘要由CSDN通过智能技术生成

一.概念

同步: 同步就是整个处理过程顺序执行,当各个过程都执行完毕之后,返回结果。
异步: 调用者无需等待被调用的方法完全执行完毕,而是继续执行下面的流程。

二.异步多线程概述

在实际项目开发中很多业务场景需要使用异步去完成,比如消息通知,日志记录以及完成大数据的导入导出等常用的功能都可以通过异步去执行,提高效率。

1.@Async的默认使用

如果在方法上直接使用注解@Async,默认使用的线程池是SimpleAsyncTaskExecutor,默认线程池会为每个任务新起一个线程,默认线程数不做限制,不复用线程,也就说只要你的任务耗时长一点,说不定服务器就给你来个OOM,最好的办法就是使用自定义的线程池。自定义线程池,可对系统中线程池更加细粒度的控制,方便调整线程池大小配置,线程执行异常控制和处理。

2.自定义线程池来使用@Async

如果想要@Async默认调用自定义的线程池,关于@Async的默认调用规则,会优先查询实现了AsyncConfigurer这个接口的类或者继承AsyncConfigurerSupport的类,所以可以按照如下代码中自定义线程池。新建一个线程池配置类,@EnableAsync在配置类上加,不用在启动类上加也行,用来开启对异步任务的支持。可以配置不同的线程池,如果配置了多个线程池,可以用@Async(“name”),那么表示线程池的@Bean的name,来指定用哪个线程池处理,假如只配置了一个线程池,直接用@Async就会用自定义的线程池执行。假如配置了多个线程池,用@Async没指定用哪个线程池,会用默认的SimpleAsyncTaskExecutor来处理。

@Configuration
//表示开启对异步任务的支持
@EnableAsync
//关于@Async的默认调用规则,会优先查询源码中实现AsyncConfigurer这个接口的类
//若想让@Async默认调用自定义线程池,则可以实现该接口
public class ExecutorConfig implements AsyncConfigurer {
   

    //获取属性文件中对应的值,如果属性文件中没有这个属性,则获取赋予的默认值,如默认核心线程数为4
    <
  • 5
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值