@Async
是Spring框架提供的一个注解,用于标记一个方法为异步方法。
当你在某个方法上加上这个注解后,Spring会用一个单独的线程去执行这个方法,这样主线程就不会被这个方法阻塞,可以继续执行其他任务。
条件1:开启异步支持
通常是通过在配置类上加上@EnableAsync
注解来实现的
java">@SpringBootApplication
@EnableAspectJAutoProxy
@EnableAsync
public class SimpleJobClonedemoApplication {public static void main(String[] args) {SpringApplication.run(SimpleJobClonedemoApplication.class, args);}}
条件2:在spring管理的Bean中使用@Async
注解
必须是Spring管理的
java">@Service
public class AsyncService {@Asyncpublic void asyncMethod() {// 这里是异步执行的代码System.out.println("异步方法执行中...");}
}
条件3(可选):可自定义线程池
默认情况下,Spring会用一个简单的线程池来执行异步任务。
注:Spring容器默认的线程池有很多,如继承AsyncConfigurer 接口定义的线程池用于@Async异步注解;ForkjoinPoll线程池用于,异步、并发流等;http-nio用于controller请求等
可以自定义线程池的配置,比如线程的数量、队列的大小等。可以通过实现AsyncConfigurer
接口来完成。
java">@Configuration
public class AsyncConf implements AsyncConfigurer {@Overridepublic Executor getAsyncExecutor() {ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();executor.setCorePoolSize(5);executor.setMaxPoolSize(10);executor.setQueueCapacity(100);executor.initialize();executor.setThreadNamePrefix("自定义线程池");return executor;}
}