- 需要开启异步,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