springboot-@async异步执行方法

本文探讨了SpringBoot中使用@Async实现异步方法的原理与常见问题。首先介绍了@Async如何通过AOP开启新线程处理任务,然后讨论了启用异步处理所需的@EnableAsync注解。接着指出在同一个Service类内调用@Async方法可能导致异步失效的解决方案,即把异步方法移到单独的类中。最后,提到了过度使用@Async对CPU的影响,建议配置线程池来优化,并展示了如何在ThreadPoolConfig.java中定义线程池和使用taskExecutor。
摘要由CSDN通过智能技术生成

1、底层技术是通过AOP技术给方法单独开辟了个线程进行数据处理。

2、service 方法上面增加 @Async,然后运行会发现一个问题,异步处理失败。

3、第2步失败,是因为需要在 启动类上增加一个注解 @EnableAsync  开启异步处理

4、如果在同一个service类中,一个方法调用 @Async 方法,异步会失效。下列情况会失效:

@Service
@Slf4j
public class UserService {
    public String getUser1(String name,String age){
        return getUser2(name,age);
    }
    @Async
    public String getUser2(String name,String age){
        System.out.println("2222222222222222");
        try{
            Thread.sleep(5000);
        }catch (Exception e){}
        User u=new User();
        u.setName(name);
        u.setAge(age);
        System.out.println("333333333333333");
        return "result:"+u.toString();
    }
}

5、第4出现的错误,可以将异步方法 放到另一个类中,然后在service类中引用此类。

6、@Async 注解是 new Thread,若无限制使用,对CPU会有很大影响,所以需要增加线程池。

定义线程池 配置类:ThreadPoolConfig.jav

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值