@Async 注解 走的是主线程 还是子线程呢
@Asyncz注解所在的包
package org.springframework.scheduling.annotation;
@Async
注解在Spring框架中用于标记一个方法为异步方法。当这个方法被调用时,它不会阻塞调用线程,而是会在一个单独的线程中执行。因此,@Async
注解走的是子线程,而不是主线程。
具体来说,当你在一个Spring管理的Bean上使用@Async
注解时,Spring会创建一个代理对象来包装这个Bean。当你调用这个Bean上的异步方法时,实际上调用的是代理对象的方法。代理对象会负责将方法调用提交给一个任务执行器(TaskExecutor),通常是一个线程池。然后,任务执行器会分配一个新的线程来执行这个方法,从而实现异步执行。
这样,主线程就可以继续执行其他任务,而不需要等待异步方法的完成。这对于提高应用程序的响应性和性能非常有用,尤其是在执行耗时的操作(如数据库查询、文件I/O、远程调用等)时。
需要注意的是,要使@Async
注解生效,你需要在Spring配置中启用异步支持。这通常通过在配置类上添加@EnableAsync
注解来实现。此外,@Async
注解的方法不能是同一个类内部的调用,因为这样不会通过代理对象,而是直接调用方法本身,从而失去异步执行的效果。