springboot与线程
springboot有一个自带的线程池类,就是ThreadPoolTaskExecutor
1 配置
1.1 配置前置解释
@EnableAsync:开启异步任务
setCorePoolSize:核心线程数
setMaxPoolSize:最大线程数
setQueueCapacity:队列大小
setThreadNamePrefix:线程名称前缀
setKeepAliveSeconds:线程活跃时间
setWaitForTasksToCompleteOnShutdown:所有任务结束再关闭线程池
setRejectedExecutionHandler:拒绝策略
initialize:初始化
1.2 config 配置
直接配置
package com.hc.store.thread;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.annotation.EnableAsync;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
/**
* @author chajintao
* @date 2022/4/26 16:36
*/
@Configuration
@EnableAsync //开启异步任务
public class ThreadConfig {
@Bean
public ThreadPoolTaskExecutor executor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(15);
//配置最大线程数
executor.setMaxPoolSize(30);
//配置队列大小
executor.setQueueCapacity(1000);
//线程名称前缀
executor.setThreadNamePrefix("executor-");
//线程活跃时间(秒)
executor.setKeepAliveSeconds(60);
//等待所有任务结束后再关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
//设置拒绝策略
//executor.setRejectedExecutionHandler(new java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy());
//执行初始化
executor.initialize();
return executor;
}
}
2 测试
对比普通的插入操作和多线程操作的效果
2.1 实体类Threads
创建实体类Threads
package com.hc.store.model