@Async 注解无效的问题

27 篇文章 1 订阅

@Async 注解作用

   在Spring中,基于@Async标注的方法,称之为异步方法;这些方法将在执行的时候,将会在独立的线程中被执行,调用者无需等待它的完成,即可继续其他的操作。即可理解为,标注了@Async注解的方法,会被主线程交给子线程去完成。

@Async注解用法

    /**
     * 保存发送短信日志
     * @param phone 手机号
     * @param object 短信参数
     * @return
     */
    @Async
    public void insertNotice(String phone, JSONObject object){
        // 业务逻辑,通常是比较低效且耗时的业务逻辑
        
    }

加了该注解,主程序调用insertNotice函数时,就不会等待该函数执行完成,类似启动子线程来执行。

new Thread(()->{
    // 业务逻辑,通常是比较低效且耗时的业务逻辑
    
}).start();

区别在于,通过@Async方法虽然也是子线程执行业务逻辑,但是避免程序创建,维护及销毁线程所带来的内存占用,该注解调用的是Spring维护的一个大的线程池中的子线程。

@Async 注解无效

实际使用中,通过DEBUG发现加了该注解并没有出现异步执行的情况,是因为缺少@EnableAsync注解。

@Service
@EnableAsync
public class MySelfServiceImpl {

    /**
     * 保存发送短信日志
     * @param phone 手机号
     * @param object 短信参数
     * @return
     */
    @Async
    public void insertNotice(String phone, JSONObject object){
        // 业务逻辑,通常是比较低效且耗时的业务逻辑
        
    }

}

一般的,如果在项目中经常使用该注解,一般会把它加到Application 类中,这样即可在全局使用该注解。

需要注意,使用该注解时,需要做一些配置,详细的可以百度。

@SpringBootApplication
@EnableAsync
public class Application {

    public static void main(String[] args) {
        SpringApplication.run(Application.class, args);
    }

}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值