Python 官方文档:入门教程 => 点击学习
目录线程池创建线程池参数线程池测试1(核心线程数量)线程池测试2(当核心线程数量和最大线程数量不够时)总结代码仓库:gitee 线程池创建 @Configuration @Enab
代码仓库:gitee
@Configuration
@EnableAsync
public class TaskPoolConfig {
@Bean("syncExecutorPool")
public Executor taskExecutor() {
ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor();
// 核心池大小
taskExecutor.setCorePoolSize(5);
// 最大线程数
taskExecutor.setMaxPoolSize(10);
// 队列程度
taskExecutor.setQueueCapacity(100);
// 线程空闲时间
taskExecutor.seTKEepAliveSeconds(60);
// 线程前缀名称
taskExecutor.setThreadNamePrefix("syncExecutor--");
// 该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,
// 这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
taskExecutor.setWaitForTasksToCompleteOnShutdown(true);
// 任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住。
taskExecutor.setAwaitTerminationSeconds(60);
// 线程不够用时由调用的线程处理该任务
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
return taskExecutor;
}
}
核心线程数量:CorePoolSize
看业务场景设置(我通常设置为CPU核心*1)
最大线程数量:MaxPoolSize
当核心线程数量都在使用状态时,会调用最大线程数量里的线程,使用的总线程不会超过最大线程数量,其余则等待(我通常设置为CPU核心*2)
队列程度:QueueCapacity
线程队列的大小
线程空闲时间:KeepAliveSeconds
线程前缀名称:ThreadNamePrefix
停机策略:WaitForTasksToCompleteOnShutdown
该方法用来设置 线程池关闭 的时候 等待 所有任务都完成后,再继续 销毁 其他的 Bean,这样这些 异步任务 的 销毁 就会先于 数据库连接池对象 的销毁。
任务的等待时间:AwaitTerminationSeconds
任务的等待时间 如果超过这个时间还没有销毁就 强制销毁,以确保应用最后能够被关闭,而不是阻塞住
拒接策略:RejectedExecutionHandler
线程不够用时由调用的线程处理该任务
结果:线程池的核心线程数量轮训执行
随机睡眠0-10000毫秒
new Random().nextInt(10000)
结果:
当5个核心线程数量不够用时,使用最大线程数量里的线程
当最大线程数量不够用时,使用主线程执行该任务
// 线程不够用时由调用的线程处理该任务
taskExecutor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());
到此这篇关于SpringBoot使用线程池(ThreadPoolTaskExecutor)示例的文章就介绍到这了,更多相关springboot线程池内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!
--结束END--
本文标题: springboot使用线程池(ThreadPoolTaskExecutor)示例
本文链接: https://lsjlt.com/news/160690.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0