• 需要开启异步,SpringBoot 项目默认是没有开启异步的,我们需要手动配置开启异步功能
  • 很简单,只需要在配置类上加上 @EnableAsync注解就行了,这个注解用于声明启用 Spring 的异步方法执行功能,需要和@Configuration注解一起使用,也可以直接加在启动类上。
  • 通过使用 @Async注解就能简单的将原来的同步函数变为异步函数
package com.osvue.win.app.dm;

import java.util.concurrent.TimeUnit;

import org.springframework.scheduling.annotation.Async;
import org.springframework.stereotype.Component;
/**
 * 
 * @ClassName:  AsyncMethod   
 * @Description:TODO(异步方法)   
 * @author: hzq 
 * @date:   2022-7-27 11:29:52    
 * @Copyright: 2022
 * 为了让@Async注解能够生效,还需要在Spring Boot的主程序中配置@EnableAsync
 */
@Component
public class AsyncMethod {

 @Async
 public void asTw() {
 
  try {
   System.out.println(222);
   TimeUnit.SECONDS.sleep(2);
   System.out.println(222+"aaa");
  } catch (InterruptedException e) {
    e.printStackTrace();
  }
  }
 
 @Async
 public void asTwa() {
  
  try {
   System.out.println(333);
   TimeUnit.SECONDS.sleep(1);
   System.out.println(333+"bbb");
  } catch (InterruptedException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
//  Thread.sleep(TimeUnit.SECONDS,2);
 }
 
 
}

自定义线程池

  • 使用 @Async 的时候,一般都会自定义线程池,因为 @Async的默认线程池为 SimpleAsyncTaskExecutor,不是真的线程池,这个类不重用线程,默认每次调用都会创建一个新的线程。

自定义线程池有三种方式

  • 实现接口 AsyncConfigurer

  • 继承 AsyncConfigurerSupport

  • 配置由自定义的 TaskExecutor 替代内置的任务执行器

  • 实现接口 AsyncConfigurer