springboot如何初始化通用线程池
发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要讲解了"springboot如何初始化通用线程池",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"springboot如何初始化通用线程池"吧
千家信息网最后更新 2026年11月01日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安全错误
数据库的锁怎样保障安全
华服互联网科技怎么样
互联网科技工作委员会副主任毛军
猪兼强互联网科技
互联网科技革命
互联网科技上市公司
互联网科技大会
济南和联互联网科技有限公司
北京大学互联网科技怎么样
昭通云南众福互联网科技有限公司
华服互联网科技官网
来此购互联网科技有限公司
互联网科技与大数据专业
开一家科技互联网公司需要多少钱
城市宝互联网科技有限公司
互联网营销推广黑科技
领航科技大厦互联网公司
互联网科技收购价值
北京军民互联网科技公司
玉溪新华互联网科技怎么选
如何强化互联网金融科技
广东万易互联网科技有限公司惠州分公司
互联网科技行业发展
科技互联网项目
深圳互联网科技怎么样
互联网为啥属于高科技
互联网科技和法律行业
郑州欣桑互联网科技有限公司
湖北辰鑫科技互联网
马化腾互联网科技教学
互联网对科技影响