springboot如何初始化通用线程池
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要讲解了"springboot如何初始化通用线程池",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"springboot如何初始化通用线程池"吧
千家信息网最后更新 2025年12月02日springboot如何初始化通用线程池
这篇文章主要讲解了"springboot如何初始化通用线程池",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"springboot如何初始化通用线程池"吧!
import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.Configuration;import org.springframework.scheduling.annotation.EnableAsync;import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;import java.util.concurrent.Executor;import java.util.concurrent.ThreadPoolExecutor;/*** @description : 通用线程池,用于异步执行写操作不影响主线程*/@Configuration@EnableAsyncpublic class InitThread { //线程池维护线程的最少数量 private static final int CORE_POOL_SIZE = 10; //线程池维护线程的最大数量 private static final int MAX_POOL_SIZE = 50; //缓存队列 private static final int QUEUE_CAPACITY = 10; //允许的空闲时间 private static final int KEEP_ALIVE = 60; @Bean public Executor myExecutor() { ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); executor.setCorePoolSize(CORE_POOL_SIZE); executor.setMaxPoolSize(MAX_POOL_SIZE); executor.setQueueCapacity(QUEUE_CAPACITY); executor.setThreadNamePrefix("executor-"); /* * 使用此策略,如果添加到线程池失败,那么主线程会自己去执行该任务,不会等待线程池中的线程去执行 */ executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); executor.setKeepAliveSeconds(KEEP_ALIVE); executor.initialize(); return executor; }}拒绝策略RejectedExecutionHandler
AbortPolicy:该策略是线程池的默认策略。使用该策略时,如果线程池队列满了丢掉这个任务并且抛出RejectedExecutionException异常public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { //不做任何处理,直接抛出异常 throw new RejectedExecutionException("Task" + r.toString() + " rejected from " + e.toString()); }DiscardPolicy :这个策略和AbortPolicy的slient版本,如果线程池队列满了,会直接丢掉这个任务并且不会有任何异常。 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { //就是一个空的方法 } DiscardOldestPolicy :这个策略从字面上也很好理解,丢弃最老的。也就是说如果队列满了,会将最早进入队列的任务删掉腾出空间,再尝试加入队列。 因为队列是队尾进,队头出,所以队头元素是最老的,因此每次都是移除对头元素后再尝试入队。 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { //移除队头元素 e.getQueue().poll(); //再尝试入队 e.execute(r); } }CallerRunsPolicy :使用此策略,如果添加到线程池失败,那么主线程会自己去执行该任务,不会等待线程池中的线程去执行。就像是个急脾气的人,我等不到别人来做这件事就干脆自己干。 public void rejectedExecution(Runnable r, ThreadPoolExecutor e) { if (!e.isShutdown()) { //直接执行run方法 r.run(); } }自定义:只要实现RejectedExecutionHandler接口,并且实现rejectedExecution方法就可以了。具体的逻辑就在rejectedExecution方法里去定义就OK了 public class MyRejectPolicy implements RejectedExecutionHandler{ public void rejectedExecution(Runnable r, ThreadPoolExecutor executor) { //Sender是我的Runnable类,里面有message字段 if (r instanceof Sender) { Sender sender = (Sender) r; //直接打印 System.out.println(sender.getMessage()); } } }感谢各位的阅读,以上就是"springboot如何初始化通用线程池"的内容了,经过本文的学习后,相信大家对springboot如何初始化通用线程池这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
线程
策略
队列
任务
方法
元素
学习
尝试
内容
就是
数量
最大
也就是
也就是说
字段
字面
对头
思路
情况
接口
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
禁毒教育科普展厅软件开发
共享数据库 软件
数据库中专业
惠州餐饮软件开发公司
江苏辅助计算机网络技术服务简介
奉贤区服务软件开发统计
java文件存储服务器
评网络技术铺助工程师总结
华腾网络技术有限公司怎么样
网络技术核心不包括哪些
it软件开发编程
软件开发源码有什么用
潍坊市软件开发招聘
百度在线网络技术 官网
为啥我连接不了任意服务器啊
计算机网络技术与应用的指法
传奇服务器注册页面黑屏
软件开发的概念与目的
锅炉控制系统软件开发
网络安全+答题游戏
重庆开县仓储生鲜软件开发
数据库安全教材
新手学什么软件开发
链接服务器会很费流量嘛
读取数据库数据转编码显示
知网研学的数据库
软件开发实习月报
数据库取值非空且唯一
大一新生网络安全专业书籍
古代战争天启区是哪个服务器