spring boot (一):异步调用@Async注解

一.什么是异步调用,异步调用的场景是什么?

       :异步调用,一个线程内包含一个操作,此操作不需要等它执行完再继续执行其他操作,我们将此操作单独存在一个线程中。比如发送短信,推送消息等

二.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.调用,注入异步类,直接使用。

猜你喜欢

转载自blog.csdn.net/weixin_39940088/article/details/86645700