我们使用线程编程时可以手动创建线程和线程池两种方式,但是在项目中一般推荐使用线程池,具体场景业务按需而定,话不多说直接上代码
- 手动创建线程
new Thread(()->{
// 写业务代码
}).start();
- 线程池配置
@Slf4j
@Configuration
@EnableAsync
public class ExecutorBaseConfig {
@Bean("myTaskExecutor")
public Executor executor() {
log.info("线程start");
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
//配置核心线程数
executor.setCorePoolSize(10);
//配置最大线程数
executor.setMaxPoolSize(20);
executor.setKeepAliveSeconds(60);
//配置队列大小
executor.setQueueCapacity(99999);
//配置线程池中的线程的名称前缀
executor.setThreadNamePrefix("taskExecutor-");
// rejection-policy:当pool已经达到max size的时候,如何处理新任务
// CALLER_RUNS:不在新线程中执行任务,而是有调用者所在的线程来执行
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
executor.setWaitForTasksToCompleteOnShutdown(true);
//执行初始化
executor.initialize();
return executor;
}
}
- springboot线程池的使用:首先需要开启异步,添加注解支持:@EnableAsync
@Async("myTaskExecutor")
public void doIt(){
// 业务自己的代码
}