当前位置: 首页 > news >正文

Spring框架使用xml方式配置ThreadPoolTaskExecutor线程池,并且自定义线程工厂

一、自定义线程工厂

自定义线程工厂需要实现java.util.concurrent.ThreadFactory接口,重写newThread方法。
示例代码:

package com.xiaobai.thread;import org.apache.log4j.Logger;import java.util.concurrent.ThreadFactory;
import java.util.concurrent.atomic.AtomicInteger;/*** 业务自定义线程工程* @author wangt*/
public class BusinessThreadFactory implements ThreadFactory {private final Logger logger = Logger.getLogger(BusinessThreadFactory.class);// 线程组private final ThreadGroup group;// 线程序号private final AtomicInteger threadNumber = new AtomicInteger(1);// 线程名称前缀private final String namePrefix;public BusinessThreadFactory(String namePrefix) {SecurityManager securityManager = System.getSecurityManager();group = securityManager != null ? securityManager.getThreadGroup(): Thread.currentThread().getThreadGroup();this.namePrefix = namePrefix + "-thread-";}@Overridepublic Thread newThread(Runnable runnable) {Thread thread = new Thread(group, runnable, namePrefix + threadNumber.getAndIncrement(), 0);// 守护线程if (thread.isDaemon()) {// 将当前线程设置为守护线程,主线程结束时,当前线程也随之结束thread.setDaemon(true);}// 线程优先级if (thread.getPriority() != Thread.NORM_PRIORITY) {// 设置普通优先级thread.setPriority(Thread.NORM_PRIORITY);}// 处理未捕捉的异常thread.setUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {@Overridepublic void uncaughtException(Thread t, Throwable e) {logger.error("异常:", e);}});return thread;}
}

二、applicationContext.xml配置自定义线程工厂及线程池

(一)自定义线程工厂配置

<!--自定义线程工厂-->
<bean id="businessThread" class="com.xiaobai.thread.BusinessThreadFactory" ><!--自定义线程工厂构造函数,参数为线程名称前缀--><constructor-arg value="business" name="namePrefix"/>
</bean>

(二)配置ThreadPoolTaskExecutor线程池

<!--Spring线程池-->
<bean id="taskExecutor" class="org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor"><!--核心线程数量--><property name="corePoolSize" value="20" /><!--最大线程数量--><property name="maxPoolSize" value="50" /><!--队列容量--><property name="queueCapacity" value="100" /><!--允许的空闲时间--><property name="keepAliveSeconds" value="60" /><!--线程超过空闲时间限制,会直接退出知道线程数量为0--><property name="allowCoreThreadTimeOut" value="true"/><!--配置自定义线程工厂--><property name="threadFactory" ref="businessThread"/>
</bean>

(三)ThreadPoolTaskExecutor线程池核心参数配置说明:

1、corePoolSize(核心线程数量):

配置核心线程数量需要考虑任务类型和任务负载等因素。
(1)CPU密集型任务:核心线程数量可设置为 CPU 核心数 + 1
(2)IO密集型任务:核心线程数量可设置为CPU 核心数 × 2,IO操作会导致线程阻塞,更多的线程可提高并发能力;
(3)如果任务负载较轻,可适当减小核心线程数量,如果任务负载较重,可适当增加核心线程数量;

2、maxPoolSize(最大线程数量):

配置最大线程数量需要考虑任务类型和任务负载等因素,最大线程数量应与队列容量匹配。
(1)CPU密集型任务:最大线程数量可设置为 CPU 核心数 + 1CPU 核心数 ×2之间;
(2)IO密集型任务:最大线程数量可设置为CPU核心数×2核心数×4之间;

3、queueCapacity(队列容量):

(1)CPU密集型任务:队列容量通常设置为100;
(2)IO密集型任务:队列容量通常设置为200到500;

4、keepAliveTime(空闲线程存活时间):

一个线程如果处于空闲状态,在指定时间内,这个线程会被销毁。

5、allowCoreThreadTimeOut(是否会回收核心线程):

如果核心线程空闲时间超过keepAliveTime,核心线程线程会被回收。

6、rejectedExecutionHandler(拒绝策略):

默认拒绝策略是ThreadPoolExecutor.AbortPolicy,任务数量超过最大线程数量,抛出RejectedExecutionException 异常。

(四)线程池使用

1、注入线程池
@Autowired
private ThreadPoolTaskExecutor taskExecutor;
2、使用线程池创建线程
Runnable runnable = new Runnable() {@Overridepublic void run() {testService.threadTest(user);}
};
taskExecutor.execute(runnable);

参考
ThreadPoolExecutor拒绝策略
为何自定义线程工厂(ThreadFactory)

相关文章:

Spring框架使用xml方式配置ThreadPoolTaskExecutor线程池,并且自定义线程工厂

一、自定义线程工厂 自定义线程工厂需要实现java.util.concurrent.ThreadFactory接口&#xff0c;重写newThread方法。 示例代码&#xff1a; package com.xiaobai.thread;import org.apache.log4j.Logger;import java.util.concurrent.ThreadFactory; import java.util.conc…...

架构-微服务-服务网关

文章目录 前言一、网关介绍1. 什么是API网关2. 核心功能特性3. 解决方案 二、Gateway简介三、Gateway快速入门1. 基础版2. 增强版3. 简写版 四、Gateway核心架构1. 基本概念2. 执行流程 五、Gateway断言1. 内置路由断言工厂2. 自定义路由断言工厂 六、过滤器1. 基本概念2. 局部…...

基于springboot的HttpClient、OKhttp、RestTemplate对比

HttpClient详细 Httpclient基础&#xff01;&#xff01;&#xff01;&#xff01;实战训练&#xff01;&#xff01;&#xff01;&#xff01;-CSDN博客 OKhttp使用 OKhttp导包 <!-- ok的Http连接池 --><dependency><groupId>com.squareup.okhttp3</g…...

(计算机组成原理)期末复习

第一章 计算机的基本组成&#xff1a;硬件软件&#xff08;程序&#xff09;计算机系统 软件有系统软件&#xff08;系统管理工具&#xff09;&#xff0c;应用软件 计算机硬件&#xff1a;包括主机和外设&#xff0c;主机包括CPU和内存&#xff0c;***CPU由运算器和控制器所组…...

从0到1部署Tomcat和添加servlet(IDEA2024最新版详细教程)

本文不仅细化了每一个步骤&#xff0c;实现了从0到1部署Tomcat和添加servlet。还针对IDEA2024版和以前的版本在部署上的区别&#xff0c;做了详细介绍&#xff0c;尤其是add framework support部分。与此同时&#xff0c;针对控制台中文乱码问题&#xff0c;本文也给出了详细解…...

【Java从入门到放弃 之 Java程序基础】

Java程序基础 Java程序基础基本数据类型和变量数据类型变量赋值基本运算算术运算比较运算逻辑运算 Java程序基础 基本数据类型和变量 数据类型 对Java语言而言&#xff0c;有如下基本数据类型。 整数类型&#xff1a;有4种整型byte/short/int/long&#xff0c;它们占用的字…...

2024年11月26日Github流行趋势

项目名称&#xff1a;v2rayN 项目维护者&#xff1a;2dust yfdyh000 CGQAQ ShiinaRinne Lemonawa 项目介绍&#xff1a;一个支持Xray核心及其他功能的Windows和Linux图形用户界面客户端。 项目star数&#xff1a;70,383 项目fork数&#xff1a;11,602 项目名称&#xff1a;fre…...

相亲交友小程序项目介绍

一、项目背景 在当今快节奏的社会生活中&#xff0c;人们忙于工作和事业&#xff0c;社交圈子相对狭窄&#xff0c;寻找合适的恋爱对象变得愈发困难。相亲交友作为一种传统而有效的社交方式&#xff0c;在现代社会依然有着巨大的需求。我们的相亲交友项目旨在为广大单身人士提…...

使用ENSP实现默认路由

一、项目拓扑 二、项目实现 1.路由器AR1配置 进入系统试图 sys将路由器命名为R1 sysname R1关闭信息中心 undo info-center enable 进入g0/0/0接口 int g0/0/0将g0/0/0接口IP地址配置为2.2.2.1/24 ip address 2.2.2.1 24进入g0/0/1接口 int g0/0/1将g0/0/1接口IP地址配置为1.…...

CSGO游戏搬砖党如何应对上海Major

大家最近都关注major比赛了吗&#xff1f;目前已经有不少顶尖CSGO战队来到了上海&#xff0c;备战即将到来的2024上海Major赛。本次比赛正赛将于11月30日开打&#xff0c;欧洲、美洲和亚太地区的24支顶尖战队通过两周的角逐&#xff0c;包括揭幕赛、淘汰赛以及决赛三种&#xf…...

【人工智能】AutoML自动化机器学习模型构建与优化:使用Auto-sklearn与TPOT的实战指南

解锁Python编程的无限可能:《奇妙的Python》带你漫游代码世界 机器学习模型的构建和优化是一个复杂且耗时的过程,涉及特征工程、模型选择、超参数调优等多个环节。AutoML(Automated Machine Learning)旨在通过自动化的方式来简化这些流程,提高开发效率并提升模型表现。Au…...

go-zero(八) 中间件的使用

go-zero 中间件 一、中间件介绍 中间件&#xff08;Middleware&#xff09;是一个在请求和响应处理之间插入的程序或者函数&#xff0c;它可以用来处理、修改或者监控 HTTP 请求和响应的各个方面。 1.中间件的核心概念 请求拦截&#xff1a;中间件能够在请求到达目标处理器之…...

vim 如何高亮/取消高亮

高亮 &#xff1a;在ESC模式下使用 shift # 取消高亮&#xff1a;在ESC模式下输入英文输入 :nohl (no highlight)...

蓝桥杯练习题

目录 1.劲舞团 2.数字诗意 3.封闭图形个数 4.回文数组 欢迎 1.劲舞团 0劲舞团 - 蓝桥云课 #include <iostream> using namespace std; int main() {int num1,M0;long long c[1000000];int cnt0;string a,b ;while(cin>>a>>b>>c[cnt])//系统自动输入…...

【设计模式】创建型模式之单例模式(饿汉式 懒汉式 Golang实现)

定义 一个类只允许创建一个对象或实例&#xff0c;而且自行实例化并向整个系统提供该实例&#xff0c;这个类就是一个单例类&#xff0c;它提供全局访问的方法。这种设计模式叫单例设计模式&#xff0c;简称单例模式。 单例模式的要点&#xff1a; 某个类只能有一个实例必须…...

使用 Docker Compose 来编排部署LMTNR项目

使用 Docker Compose 来部署一个包含 Linux、MySQL、Tomcat、Nginx 和 Redis 的完整项目的例子。假设我们要部署一个简单的 Java Web 应用&#xff0c;并且使用 Nginx 作为反向代理服务器。 项目目录结构 首先需要确保 Docker 和docker-compose已经安装并正在运行。docker --v…...

创建HTTPS网站

每天&#xff0c;我们都会听到网络上发生身份盗窃和数据侵权的案例&#xff0c;这导致用户对自己访问的网站更加怀疑。他们开始更加了解自己将个人信息放在哪里以及信任哪些类型的网站。了解如何使网站使用HTTPS变得比以往任何时候都更加重要。 解读缩略词&#xff1a;HTTP与HT…...

以3D数字人AI产品赋能教育培训人才发展,魔珐科技亮相AI+教育创新与人才发展大会

11月20日&#xff0c;北京中关村国际创新中心迎来了“AI教育创新与人才发展大会暨首届北京数字人才发展大会”的盛大启幕。此次大会汇聚了培训、教育、科技、人才领域的专家学者、行业领袖及企业代表&#xff0c;共同探讨人工智能技术在教育培训领域的革新应用与数字人才培养体…...

springboot配置https,并使用wss

学习链接 springboot如何将http转https SpringBoot配置HTTPS及开发调试 Tomcat8.5配置https和SpringBoot配置https 可借鉴的参考&#xff1a; springboot如何配置ssl支持httpsSpringBoot配置HTTPS及开发调试的操作方法springboot实现的https单向认证和双向认证(java生成证…...

Qt SQL模块概述

Qt SQL支持的数据库 要在项目中使用 Qt SQL 模块&#xff0c;需要在项目配置文件中添加下面一条设置语句&#xff1a; Qt sql在头文件或源文件中使用 Qt SQL 模块中的类&#xff0c;可以使用包含语句&#xff1a; #include <QtSql>这样会将某个 Qt SQL 模块中的所有类…...

2024年App上架全攻略:从软著申请到应用市场发布

1. 2024年App上架必备条件全解析 想在2024年把App成功上架到各大应用市场&#xff0c;开发者需要跨过几道硬性门槛。最近帮几个创业团队走完上架流程&#xff0c;发现很多新手容易在这些基础环节卡壳。先说最重要的三件套&#xff1a;软件著作权证书、App备案号、应用市场要求的…...

流注放电,COMSOL放电仿真,等离子体仿真,棒板电极,空气流注,流注放电,需要拿去参考

流注放电&#xff0c;COMSOL放电仿真&#xff0c;等离子体仿真&#xff0c;棒板电极&#xff0c;空气流注&#xff0c;流注放电&#xff0c;需要拿去参考。流注放电这玩意儿在高压设备里常见得跟小区门口的便利店似的。实验室里整了个棒板电极结构&#xff0c;空气里突然窜出条…...

YimMenu安全增强指南:四阶法实现GTA V体验升级

YimMenu安全增强指南&#xff1a;四阶法实现GTA V体验升级 【免费下载链接】YimMenu YimMenu, a GTA V menu protecting against a wide ranges of the public crashes and improving the overall experience. 项目地址: https://gitcode.com/GitHub_Trending/yi/YimMenu …...

猫抓插件:让网页资源捕获变得高效简单的浏览器扩展解决方案

猫抓插件&#xff1a;让网页资源捕获变得高效简单的浏览器扩展解决方案 【免费下载链接】cat-catch 猫抓 chrome资源嗅探扩展 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 在数字时代&#xff0c;我们每天浏览网页时都会遇到各种有价值的媒体资源——可…...

基于设备树与内核中断的125KHZ RFID曼彻斯特码实时解码实践

1. 曼彻斯特码解码原理详解 125KHz RFID系统广泛用于门禁、物流追踪等场景&#xff0c;其数据传输采用曼彻斯特编码方式。这种编码最大的特点是每个数据位都包含电平跳变&#xff0c;使得时钟恢复变得简单。具体来说&#xff0c;EM4100卡片每传送一位数据需要64个载波周期&…...

LeetDown完全指南:系统降级功能解决A6/A7设备用户的卡顿痛点

LeetDown完全指南&#xff1a;系统降级功能解决A6/A7设备用户的卡顿痛点 【免费下载链接】LeetDown a GUI macOS Downgrade Tool for A6 and A7 iDevices 项目地址: https://gitcode.com/gh_mirrors/le/LeetDown LeetDown是一款专为macOS设计的图形化降级工具&#xff0…...

AnythingtoRealCharacters2511效果展示:动漫角色真人化案例

AnythingtoRealCharacters2511效果展示&#xff1a;动漫角色真人化案例 你有没有想过&#xff0c;如果自己喜欢的动漫角色真的出现在现实世界里&#xff0c;会是什么样子&#xff1f;不是那种粗糙的3D建模&#xff0c;也不是简单的滤镜叠加&#xff0c;而是看起来就像用专业相…...

实战指南:如何用Hydra在Kali Linux上快速破解Telnet弱密码(附字典优化技巧)

Kali Linux渗透测试实战&#xff1a;Hydra高效破解Telnet服务的进阶技巧 在渗透测试和网络安全评估中&#xff0c;弱密码检测是基础但至关重要的环节。Telnet作为传统的远程管理协议&#xff0c;由于采用明文传输&#xff0c;成为安全测试的重点对象。本文将深入探讨如何利用Ka…...

零售店长必看:如何用iBeacon+微信小程序打造低成本智能导购(2024最新方案)

零售店长必看&#xff1a;如何用iBeacon微信小程序打造低成本智能导购&#xff08;2024最新方案&#xff09; 走进任何一家现代零售门店&#xff0c;你可能会注意到顾客们不再茫然地寻找商品&#xff0c;而是自然地掏出手机&#xff0c;接收个性化的商品推荐和促销信息。这种无…...

Pixel Fashion Atelier保姆级教程:从INSERT COIN按钮到像素粒子物理引擎解析

Pixel Fashion Atelier保姆级教程&#xff1a;从INSERT COIN按钮到像素粒子物理引擎解析 1. 像素时装锻造坊简介 像素时装锻造坊是一款融合了复古游戏美学与现代AI技术的图像生成工具。它基于Stable Diffusion和Anything-v5模型构建&#xff0c;专为时尚设计和像素艺术创作而…...