“@Async注解一定会异步执行吗?”
一个工作3年的粉丝在第一面被问到这个问题没有回答出来,今天正好有空,给大家分析一下这个面试题。
另外文字版本的回答已经添加到了30W字的大厂面试指南中,里面还保包括各个一线大厂的场景真题和解析。
大家可以扫描文章尾端二维码领取~
问题分析
这个问题考察候选人对Spring框架中的异步处理注解的理解。
@Async注解是Spring框架提供的注解,用于标记方法为异步执行,Spring会把@Async标记的方法的执行放在一个单独的线程中实现异步执行。
具体的实现原理是,Spring框架默认会使用一个线程池来管理异步方法的执行,它会把标记为@Async的方法封装为一个代理对象,在调用这个方法的时候,使用线程池来执行这个方法体。
下面来看一下这个问题的完整回答。
问题解答
在我看来,@Async注解本身只是标记方法为异步执行,但是否真正异步执行方法还取决于两个点。
-
在使用@Async注解之前,必须配置一个合适的线程池来执行异步方法。否则方法可能会同步执行而不是异步执行。
-
@Async标记的方法必须是放在Spring管理的Bean中,同时调用异步方法的类也必须是由Spring管理的Bean,因为@Async是由Spring框架来实现,所以需要委托给Spring来创建代理对象来实现异步执行。
总结
大家知道怎么回答了吗?
如果你喜欢我的作品,记得点赞收藏加关注哦!!!