Spring Boot中的JDK 线程池以及Tomcat线程池使用与配置
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskScheduler;
import java.util.concurrent.Executor;
import java.util.concurrent.ThreadPoolExecutor;
@Configuration
public class AsyncConfig {
@Bean(name = "taskExecutor")
public Executor taskExecutor() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(4); // 核心线程数
executor.setMaxPoolSize(8); // 最大线程数
executor.setQueueCapacity(100); // 队列大小
executor.setKeepAliveSeconds(60); // 线程空闲时的存活时间
executor.setThreadNamePrefix("default-thread-"); // 线程名称的前缀
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); // 拒绝策略
executor.initialize();
return executor;
}
@Bean(name = "taskScheduler")
public ThreadPoolTaskScheduler taskScheduler() {
ThreadPoolTaskScheduler scheduler = new ThreadPoolTaskScheduler();
scheduler.setPoolSize(4); // 设置线程池大小
scheduler.setThreadNamePrefix("scheduled-thread-"); // 设置线程名称的前缀
scheduler.setAwaitTerminationSeconds(60); // 设置线程池关闭前等待的时间
scheduler.setWaitForTasksToCompleteOnShutdown(true); // 设置是否等待队列中的任务在关闭前完成
return scheduler;
}
}
这个配置类定义了两个Bean:一个用于异步任务的线程池(taskExecutor),另一个用于定时任务的线程池调度器(taskScheduler)。通过这样的配置,开发者可以很容易地根据应用需求对线程池进行定制,并且可以通过注入这些Bean来使用它们。
评论已关闭