本文最后更新于2 分钟前,文中所描述的信息可能已发生改变。
SpringBoot中使用@EnableAsync与@Async实现共享线程池
- 首先需要定义一个配置类对
ThreadPoolTaskExecutor
对象进行配置,并交给容器
ThreadPoolTaskExecutor
对象是Spring中的一个用于执行异步任务的线程池
java
@Configuration
@EnableAsync //开启异步支持
public class ThreadPoolConfig {
@Bean("TaskExecutor") //指定线程池名称
public Executor threadPoolTaskExecutor(){
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
/*设置核心线程数*/
executor.setCorePoolSize(5);
/*设置最大线程数*/
executor.setMaxPoolSize(10);
/*设置队列容量*/
executor.setQueueCapacity(255);
/*设置线程活跃时间*/
executor.setKeepAliveSeconds(60);
/*设置线程名后缀*/
executor.setThreadNamePrefix("@holo");
/*设置是否等待任务全部执行完结束线程池*/
executor.setWaitForTasksToCompleteOnShutdown(true);
/*初始化线程池*/
executor.initialize();
return executor;
}
}
- 然后在需要异步执行的地方加上注解
@Async("TaskExecutor")
并在其中指定线程池的名称即可,该方法就会被线程池中的线程进行执行。
利用ThreadLocal来进行存储用户信息
ThreadLocal
是Java
当中的一个本地线程变量,是一个属于线程的局部变量,各个线程之间互不干扰,具有隔离性,是线程安全的。 原理:每个线程其实都有一个map