springboot如何初始化通用线程池
发表于:2025-02-03 作者:千家信息网编辑
千家信息网最后更新 2025年02月03日,这篇文章主要讲解了"springboot如何初始化通用线程池",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"springboot如何初始化通用线程池"吧
千家信息网最后更新 2025年02月03日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安全错误
数据库的锁怎样保障安全
太原定制软件开发
获取服务器名称
在阿里云买的服务器怎么用
软件开发环境与工具课后题
和知网数据库相近的查重软件
深圳因味网络技术
鹤壁网络安全宣传片
服务器时间怎么获得
木瓜互联网科技布沙发清洁剂
上海农商银行软件开发工资
网络安全二级等保几年一审
暗黑3只在数据库的宝石
玖瞬软件开发有限公司
漫说网络安全法三十七
阳江互联网科技金融企业办理
地产软件开发联系方式
企业网络安全一季度重点工作
黑色沙漠 数据库文件
智能汽车网络安全对策
网络安全宣传日线上活动
奇秀云服务器
绍兴网络安全态势感知装置
服务器复制粘贴
网络安全国土安全
我的世界网易版天空之城服务器
东营环保局软件开发招标
红河互联网科技找哪家
腾讯互联网科技心得
全国计算机网络技术试题
国内服务器优化