一.什么是异步调用,异步调用的场景是什么?
:异步调用,一个线程内包含一个操作,此操作不需要等它执行完再继续执行其他操作,我们将此操作单独存在一个线程中。比如发送短信,推送消息等
二.spring boot异步调用实例
## 第一种:无异步操作的返回值,主线程到异步操作时采用独立的异步线程,主线程继续进行下一步
1.先创建异步的操作的类
增加注解@Component //配置类等非service control的都可用此注解将其交给spring容器,@Async
@Component
public class TestAsync{
@Async(“执行的线程规则:taskExecutor”)
public void method1(){
#############操作#########Thread.sleep(2000)##########
}
}
2.配置线程规则:配置类 @Configuration //同级别的有@service @control @component
@Configuration
public class MyConfiguration {
@Bean(" taskExecutor)
public Executor taskExecutor(){
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);//线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
taskExecutor.setAwaitTerminationSeconds(60);//设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住
taskExecutor.setCorePoolSize(4);
taskExecutor.setMaxPoolSize(8);
taskExecutor.setQueueCapacity(Integer.MAX_VALUE);//缓冲执行任务的队列
taskExecutor.setKeepAliveSeconds(60);//当超过了核心线程出之外的线程在空闲时间到达之后会被销毁
taskExecutor.setThreadNamePrefix("kanjia-websocket-thread-");
return taskExecutor;
}
}
在yml里配上
taskExecutor:
setWaitForTasksToCompleteOnShutdown:true
//线程池关闭的时候等待所有任务都完成再继续销毁其他的Bean
taskExecutor:
setAwaitTerminationSeconds: 60
//设置线程池中任务的等待时间,如果超过这个时候还没有销毁就强制销毁,以确保应用最后能够被关闭,而不是阻塞住
3.在启动项上增加@EnableAsync注解
4.调用,注入异步类,直接使用。