spring boot 实现多线程
程序员文章站
2022-05-01 13:04:11
...
配置类
配置类开启异步支持需要添加@EnableAsync注解。
配置类实现接口AsyncConfigurator,返回一个ThreadPoolTaskExecutor线程池对象
配置最小线程数、最大线程数、等待队列
@ComponentScan("com.lgh.service")也可添加这个注解来配置扫描service包下的
@Configuration
//开启异步支持
@EnableAsync
public class AsyncTaskConfig implements AsyncConfigurer {
@Override
public Executor getAsyncExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
taskExecutor.setCorePoolSize(5);// 最小线程数
taskExecutor.setMaxPoolSize(10);// 最大线程数
taskExecutor.setQueueCapacity(25);// 等待队列
taskExecutor.initialize();
return taskExecutor;
}
@Override
public AsyncUncaughtExceptionHandler getAsyncUncaughtExceptionHandler() {
return null;
}
}
ThredPoolTaskExcutor的处理流程
当当前线程池大小小于 corePoolSize (最小线程数)则创建新的线程,并处理请求
当当前线程池大小等于 corePoolSize 则会将请求放入workQueue中,线程池中的空闲线程就去workQueue中取任务并处理
当workQueue放不下任务时,就新建线程入池,并处理请求,如果池子大小达到了了maximumPoolSize(最大线程数),就用RejectedExecutionHandler来做拒绝处理
当池子的线程数大于 corePoolSize 时,多余的线程会等待keepAliveTime长时间,如果无请求可处理就自行销毁
配置多线程
@Async注解,注明此...为异步,可加在类上,表明此类下的方法都为异步方法,也可加在方法上,表明此方法为异步方法
@Async
public void executeAsyncTask(Integer i){
System.out.println("执行异步任务:" + i);
}