springboot自定义线程池
时间:2019-02-11
本文章向大家介绍springboot自定义线程池,主要包括springboot自定义线程池使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
/**
* @auther fanxuebo
* @desc 线程池配置和初始化
* @Company
* @create 2018/12/29 8:23
*/
@Configuration
public class MyExecutorPool {
@Autowired
private ThreadPoolProperties threadPoolProperties;
@Bean(name = "myAsyncThread")
public ThreadPoolTaskExecutor myTaskAsyncPool() {
ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
executor.setCorePoolSize(threadPoolProperties.getCorePoolSize());//表示线程池核心线程,正常情况下开启的线程数量。
executor.setMaxPoolSize(threadPoolProperties.getMaxPoolSize());//当核心线程都在跑任务,还有多余的任务会存到此处。
executor.setQueueCapacity(threadPoolProperties.getQueueCapacity());//如果queueCapacity存满了,还有任务就会启动更多的线程,直到线程数达到maxPoolSize。如果还有任务,则根据拒绝策略进行处理。
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy());//该策略是又调用任务的线程执行。
executor.setKeepAliveSeconds(threadPoolProperties.getKeepAliveSeconds());//非核心线程的超时时长,超长后会被回收。
executor.setThreadNamePrefix(threadPoolProperties.getThreadNamePrefix());
executor.initialize();//初始化线程池。
return executor;
}
}
/** * @auther fanxuebo * @desc 配置线程池参数读取配置文件 * @Company * @create 2018/12/29 8:27 */ @ConfigurationProperties("executor") @Component public class ThreadPoolProperties { private Integer corePoolSize; private Integer maxPoolSize; private Integer queueCapacity; private Integer keepAliveSeconds; private String threadNamePrefix; public Integer getCorePoolSize() { return corePoolSize; } public void setCorePoolSize(Integer corePoolSize) { this.corePoolSize = corePoolSize; } public Integer getMaxPoolSize() { return maxPoolSize; } public void setMaxPoolSize(Integer maxPoolSize) { this.maxPoolSize = maxPoolSize; } public Integer getQueueCapacity() { return queueCapacity; } public void setQueueCapacity(Integer queueCapacity) { this.queueCapacity = queueCapacity; } public Integer getKeepAliveSeconds() { return keepAliveSeconds; } public void setKeepAliveSeconds(Integer keepAliveSeconds) { this.keepAliveSeconds = keepAliveSeconds; } public String getThreadNamePrefix() { return threadNamePrefix; } public void setThreadNamePrefix(String threadNamePrefix) { this.threadNamePrefix = threadNamePrefix; } }
配置文件:
executor: corePoolSize: 5 maxPoolSize: 10 queueCapacity: 20 keepAliveSeconds: 60 threadNamePrefix: XCExecutor-
在springboot启动类加@EnableAsync注解,然后在需要多线程执行的方法上加注解@Async(value = "myAsyncThread")即可。
- Redis 应用案例 - 在问题中不断成长
- OpenCV中神经网络介绍与使用
- OpenCV中导向滤波介绍与应用
- 学习SQL【9】-集合与联结
- 爬取《The Hitchhiker’s Guide to Python!》python进阶书并制成pdf
- OpenCV中积分图介绍与应用
- OpenCV 3.4发布啦!
- 使用 NodeJS 实现反向代理
- 小程序示例 - 不同页面间的消息传递
- Kafka 消息的生产消费方式
- 塔秘 | 从Zero到Hero,一文掌握Python关键代码
- 微信小程序请求server时遇到的2个问题
- Android NDK层编译OpenCV代码开发详解
- 实时通信框架 Socket.IO
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- 从单词嵌入到文档距离 :WMD一种有效的文档分类方法
- 程序员技术选型:写Go还是Java?
- 用python爬虫简单网站却有 “多重思路”--猫眼电影
- 对开发者而言,GitHub Profile可能是比简历更好的求职利器
- R语言中GLM(广义线性模型),非线性和异方差可视化分析
- leetcode树之二叉树的深度
- PowerBI DAX 库存余量模型与计算
- 20种小技巧,玩转Google Colab
- 图深度学习入门教程(九)——图滤波神经网络模型
- 技术分享 | 我的内存去哪儿?生产实践
- 数据传输 | DTLE 3.20.09.0 来啦!
- R语言对巨灾风险下的再保险合同定价研究案例:广义线性模型和帕累托分布Pareto distributions分析
- 精解四大集合框架:Set核心知识总结
- NeurIPS 2020 | 一种崭新的长尾分布下分类问题的通用算法
- 精解四大集合框架:Map核心知识总结