Springboot默认装配的容器中存在线程池的容器,在Springboot项目中使用线程池很容易,只需要使用一个配置类来创建线程池实例,在要使用线程池调用的方法中增加线程池注解即可,下面说明如何在Springboot中使用线程池。
- 配置线程池
@Configuration
@EnableAsync // 可以异步执行
public class ThreadPoolConfig {
@Bean("taskExecutor")
public Executor asyncServiceExecutor() {
// 线程池实例
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
// 设置核心线程数
executor.setCorePoolSize(5);
// 设置最大线程数
executor.setMaxPoolSize(20);
// 设置队列大小
executor.setQueueCapacity(Integer.MAX_VALUE);
// 设置线程活跃时间(秒)
executor.setKeepAliveSeconds(60);
// 设置线程默认名称
executor.setThreadNamePrefix("线程池执行-");
// 等待所有任务结束后关闭线程池
executor.setWaitForTasksToCompleteOnShutdown(true);
// 执行初始化
executor.initialize();
return executor;
}
}
- 定义service实现类
@Component
public class ThreadService {
// 线程池测试
@Async("taskExecutor")
public void useThreadPool() {
System.out.println("当前线程:" + Thread.currentThread().getName());
// 打印9x9乘法表
for (int i = 1; i <= 9; i++) {
for (int j = 1; j <= i ; j++) {
System.out.print(i + "x" + j + "=" + i * j + " ");
}
System.out.println();
}
}
}
- 使用线程池
@SpringbootTest
public class ThreadPoolTest() {
@Autowired
private ThreadService threadService;
@Test
public void testThreadPoolUse() {
threadService.useThreadPool();
}
}
打印结果如下:
可知执行线程为我们定义的线程池中的线程。