异步其实在很多地方都会用到,比如报表,生成二维码等,所以希望在点击按钮之后,页面不需要等待报表的生成,因为等待生成的过程会很漫长和枯燥,所以就需要异步去处理这件事情:
在Spring中存在一个AsyncConfigurer 接口,它是一个可以配置异步线程池的接口,它的源码清单:
public interface AsyncConfigurer {
//获取线程池
@Nullable
default Executor getAsyncExecutor() {
return null;
}
//异步异常处理器
@Nullable
default AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
其中getAsyncExecutor方法返回的是一个自定义线程池,这样在开启异步时,线程池就会提供空闲的线程来执行异步任务.
异步实例:
@Configuration
@EnableAsync
public class AsyncConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
//定义线程池
ThreadPoolTaskExecutor threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
//核心线程数
threadPoolTaskExecutor.setCorePoolSize(10);
//线程最大线程数
threadPoolTaskExecutor.setMaxPoolSize(30);
//线程队列最大线程数
threadPoolTaskExecutor.setQueueCapacity(2000);
//初始化
threadPoolTaskExecutor.initialize();
return threadPoolTaskExecutor;
}
}
代码中 @EnableAsync 代表开启Spring异步,这样就可以使用@Async驱动Spring使用异步;
这样就可以了,异步Service接口和正常一样,然后就是它的实现,就是在他的实现类上边添加@Async 注解就可以实现异步啦!!!