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

Java线程池基本概念

  • 全局和局部线程池
    • 全局线程池
      • 在Spring框架中,全局线程池如ThreadPoolTaskExecutor通常是作为Spring Bean存在的,它们的生命周期由Spring容器管理。当Spring容器关闭时,这些线程池也会被适当地清理和关闭。因此,开发者通常不需要手动关闭这些全局线程池
    • 局部线程池
      • 对于在方法内部或者某个局部作用域创建的线程池,它们是局部资源,不会被Spring容器管理。如果不关闭这些线程池,可能会导致线程泄漏,因为这些线程池会继续存在并占用系统资源,直到程序结束。因此,使用完局部线程池后,需要调用shutdown()或shutdownNow()方法来关闭线程池,释放资源。
    • 资源管理
      • 关闭线程池是为了合理管理资源,防止资源泄露和浪费。全局线程池由Spring容器管理,可以确保在应用关闭时得到妥善处理。而局部线程池如果没有正确关闭,可能会导致不必要的资源占用,甚至影响应用程序的稳定性。
    • 总结:全局线程池由于其与Spring容器的生命周期绑定,通常不需要手动关闭;而局部线程池需要在使用完毕后显式关闭,以避免资源泄露和其他潜在问题。
    • 多线程使用要设置超时时间不然会OOM
      • 默认:超时时间并不是一个固定的时间,而是取决于多种因素,包括Spring的配置、操作系统和Java虚拟机的配置等
      • 设置了最大活跃时间,会变成默认超时时间
      • 原因:线程资源未释放,如果线程执行的任务长时间无法完成,这些线程会持续占用系统资源,包括内存。当应用创建过多未完成任务的线程时,内存资源逐渐被消耗,最终可能导致内存不足,从而引发OO
  • 单个线程池和多个线程池
    • 案例区别
      • 某程序使用:
        • ThreadPoolExecutor ThreadPoolAll = new ThreadPoolExecutor(30,60);
      • 某程序使用:
        • ThreadPoolExecutor ThreadPoolA = new ThreadPoolExecutor(15,30);
        • ThreadPoolExecutor ThreadPoolB = new ThreadPoolExecutor(15,30);
    • 单个线程池的优势
      • 简单:只需要管理一个线程池,代码实现和维护相对简单。
      • 资源共享:所有任务都在同一个线程池中执行,可以更好地利用系统资源,避免资源碎片化即有效利用资源。
    • 多个线程池的优势
      • 线程池资源隔离:每个线程池都有其最大线程数限制,可以防止某个线程池占用过多资源,导致其他线程池资源不足。
      • 任务优先级:通过配置不同的线程池,可以根据任务优先级为不同类型的任务分配不同的资源。
      • 鲁棒性:如果某个线程池出现问题,不会影响到其他线程池的正常运行。
  • ThreadLocal
    • 存储原理
      • threadLocal内部维护了一个Map,用于存储线程ID到其对应变量副本的映射。当一个线程访问ThreadLocal时,它会通过线程ID在Map中找到对应的变量副本。这样,即使多个线程同时访问同一个ThreadLocal变量,它们也只会访问到自己线程的专属副本。
      • 线程ID是关键,主线程会有主线程的线程ID,子线程会有子线程的线程ID,根据ID找副本
    • 依赖部署内存
      • ThreadLocal并不直接依赖部署内存,因为它主要是在运行时为每个线程分配独立的变量副本。然而,ThreadLocal的实现需要消耗一定的内存资源,因为它需要为每个线程维护一个Map结构来存储变量副本。因此,在使用ThreadLocal时,需要关注它对系统内存的影响
    • 使用注意
      • 需要注意的是,ThreadLocal不会自动回收不再使用的线程变量副本。如果线程长时间运行且频繁使用ThreadLocal,可能导致内存泄漏。因此,在使用ThreadLocal时,要确保在线程结束时手动调用remove()方法,以释放内存资源。
      • 弱引用原因
      • k-v; k都有模块名称,来区分上游链路调用,通过模块名称+线程id,确保底层的ThreadLocalMap在不同工作区间工作
    • 操作
      • set
      • get
      • remove
    • 使用场景
      • 为每个线程分配一个独享的对象,如Connection
      • 保存全局变量,特别是在拦截器中获取用户信息的场景。这样可以让不同方法直接使用这些变量,避免参数传递的麻烦
      • 数据库连接池的应用
        • 好处
          • 1,在数据库连接池中使用ThreadLocal的主要原因是为了保证每个线程都有其独立的数据库连接,这样可以避免多个线程之间的连接干扰,提高系统的稳定性和性能。
          • 2,ThreadLocal可以为每个线程提供一个独立的数据库连接,确保多个线程操作数据库时不会出现资源竞争的问题。此外,当每个线程都拥有自己的数据库连接时,避免了频繁地从连接池中获取和归还连接的开销,因此可以提高性能
          • 3,ThreadLocal还可以确保在一个线程内,可能需要进行的多个数据库操作使用的是同一个连接,从而保证事务的一致性
            • 类似用户是一个主线程在应用配置的分布式事务中,主线程拥有线程id,这个线程id有两个数据库的connection链接副本,所以能保证事务的一致性
            • 多个用户,多个线程ID
        • 不使用ThreadLocal的影响
          • 每次需要数据库连接时,都必须从连接池中获取,而在操作完成后归还。这样的频繁操作会增加额外的开销
          • 如果多个线程共享同一个数据库连接,可能会出现数据混乱、连接状态被意外修改等问题。同时,要确保一个线程内的多个数据库操作使用同一个连接进行事务管理会变得复杂
        • 总结
          • 数据库连接池使用ThreadLocal的主要原因是为了保证每个线程都有一个独立的数据库连接,从而提高系统的稳定性和性能。ThreadLocal为每个线程提供了独立的资源副本,避免了资源竞争的问题,并且可以通过缓存连接来减少频繁获取和归还连接的开销。此外,ThreadLocal还有助于简化事务管理,确保多个数据库操作在同一事务内进行。如果不使用ThreadLocal,可能会导致资源竞争、数据混乱和事务一致性问题。

相关文章:

Java线程池基本概念

全局和局部线程池 全局线程池 在Spring框架中,全局线程池如ThreadPoolTaskExecutor通常是作为Spring Bean存在的,它们的生命周期由Spring容器管理。当Spring容器关闭时,这些线程池也会被适当地清理和关闭。因此,开发者通常不需要手…...

智能车联网安全发展形势、挑战

一、技术演进加速车联网安全环境复杂变化 当前,5G、大数据、大算力、大模型等技术正加速在车联网领域实现融合应用。车联网的网络通信能力、感知计算水平以及创新业务应用都在快速发展,与此同时,车联网的网络安全环境也在随之演进变化&#…...

AWS概述

AWS概述EMR Serverless Aamzon Web Services提供了一系列全球范围的云产品,包括计算、存储、数据库、分析、网络、移动、开发工具、管理工具、IoT、安全和企业应用:按需交付、及时可用、采用随用随付的定价模式。你可以畅享200多种服务,从数据…...

MySQL常见面试题自测

文章目录 MySQL基础架构一、说说 MySQL 的架构?二、一条 SQL语句在MySQL中的执行过程 MySQL存储引擎一、MySQL 提供了哪些存储引擎?二、MySQL 存储引擎架构了解吗?三、MyISAM 和 InnoDB 的区别? MySQL 事务一、何谓事务&#xff1…...

c语言回顾-函数递归

1.递归的介绍 1.1什么是递归 递归是指在一个函数的定义中调用自身的过程。简单来说,递归是一种通过重复调用自身来解决问题的方法。 递归包括两个关键要素:基本情况和递归情况。基本情况是指当问题达到某个特定条件时,不再需要递归调用&am…...

消息队列-RabbitMQ-延时队列实现

死信队列 DLX,全称为Dead-Letter-Exchange,死信交换机,死信邮箱。当消息在一个队列中变成死信之后,它能重新发送到另外一个交换器中,这个交换器就是DLX,绑定DLX的队列就称为死信队列。 导致死信的几种原因: ● 消息…...

【热门开源项目推荐】满足不同程序员的需求与关注点

目录 前言一、热门开源项目介绍二、使用开源热门项目的优势(一)经济方面(二)技术方面(三)社区支持及协作方面 三、程序员选择项目模型建议(一)关键步骤(二)示…...

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析)

一文理清GO语言日志库实现开发项目中的日志功能(rotatelogs/zap分析) rotatelogs rotatelogs 是一个用于管理日志文件的 Go 语言库,它提供了自动轮换、压缩和删除旧日志文件的功能。这个库可以帮助你更好地管理和维护你的应用程序日志。要使…...

【Go语言精进之路】构建高效Go程序:了解string实现原理并高效使用

🔥 个人主页:空白诗 🔥 热门专栏:【Go语言精进之路】 文章目录 引言一、Go语言的字符串类型1.1 字符串的定义1.2 字符串的零值可用1.3 字符串的不可变性1.4 字符串的拼接1.5 字符串的常用方法1.6 实际使用示例 二、字符串的内部表…...

HDFS 常见命令

在HDFS创建文件夹:hdfs dfs -mkdir /test 复制本地文件到HDFS中某个目录下:hdfs dfs -put /本地路径 /hdfs 路径 查看文件内容:hdfs dfs -cat /test.txt 查看当前文件夹目录:hdfs dfs -ls / 查看文件夹中的文件数:…...

示例:WPF中应用Grid的SharedSizeGroup设置整齐的布局

一、目的&#xff1a;应用Grid的SharedSizeGroup设置整齐的布局 二、实现 <ItemsControl ItemsSource"{local:GetStudents Count5}"><ItemsControl.ItemTemplate><DataTemplate><Grid ShowGridLines"True"><Grid.ColumnDefinit…...

React的form表单自定义校验规则

使用antd开发的过程中&#xff0c;必定会遇到需要对form表单进行必填校验的处理&#xff0c;正常情况下&#xff0c;我们都会一个空的必填校验&#xff0c;如下&#xff1a;一般我们只需要简单配置rules即可 <FormItem label"管理员姓名" {...itemLayout.wholeLi…...

一种新的一维时间序列信号盲解卷积算法(以旋转机械故障诊断为例,MATLAB环境)

一种新的一维时间序列信号盲解卷积算法&#xff08;以旋转机械故障诊断为例&#xff0c;MATLAB环境&#xff09;&#xff0c;可作为深度学习信号前处理过程&#xff0c;水个SCI不是问题。 机械设备的状态信号中往往蕴含着大量的设备异常信息。如何从繁多的机械状态信号中提取足…...

618电商是社区网站入局的好时机吗?

近日&#xff0c;随着618大促的临近&#xff0c;许多内容平台像B站、小红书等纷纷被电商活动所充斥&#xff0c;让用户感觉仿佛被电商绑架一般。这种用户体验的极度不佳让人开始思考&#xff0c;难道这就是互联网社区的未来发展方向吗&#xff1f; 在所有平台性质的社区中&…...

不知道密码,一样能卸载瑞星esm防病毒终端安全防护系统

离开单位后试图卸载瑞星的时候却发现还需要密码&#xff0c;真是烦死了。研究了几分钟后找到了完美卸载方法。 首先&#xff0c;让我们请出老流氓360安全卫士&#xff0c;下载好它&#xff0c;让右键菜单出现使用 360强力删除这一选项。 之后&#xff0c;进入安全模式&#x…...

Chromium 开发指南2024 Mac篇-安装和配置depot_tools工具(三)

1.引言 在前两篇指南中&#xff0c;我们详细介绍了在 macOS 环境下编译 Chromium 所需的硬件要求和系统依赖&#xff0c;并具体讲解了如何正确安装和配置 Xcode。通过这些步骤&#xff0c;您已经为编译 Chromium 打下了坚实的基础。然而&#xff0c;编译 Chromium 还需要配置一…...

微信小程序-路由和页面跳转API

一.wx.navigateTo wx.navigateTo是通过编程实现页面跳转&#xff0c;和navigator组件组件中&#xff0c;open-type"navigate"属性类似&#xff0c;是保留当前页面跳转新的页面&#xff0c;不适用tabbar页面。 //保留当前页面&#xff0c;跳转到非tabbar页面wx.navig…...

PWR电源控制

一、PWR简介 1、PWR&#xff08;Power Control&#xff09;电源控制 &#xff08;1&#xff09;PWR负责管理STM32内部的电源供电部分&#xff0c;可以实现可编程电压监测器和低功耗模式的功能 &#xff08;2&#xff09;可编程电压监测器&#xff08;PVD&#xff09;可以监控…...

【记录46】【案例】echarts 柱状图

echarts环境4.1.0 <template><div id"threefour"></div> </template> <script> import * as echarts from "echarts" export default {name:"",components:{},data(){return {}},methods:{getdata(){var myChart…...

Github2024-06-12 开源项目日报 Top10

根据Github Trendings的统计,今日(2024-06-12统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目4JavaScript项目2Lua项目1PHP项目1Blade项目1非开发语言项目1TypeScript项目1Shell项目1从零开始构建你喜爱的技术 创建周期:2156 天…...

uniapp 对接腾讯云IM群组成员管理(增删改查)

UniApp 实战&#xff1a;腾讯云IM群组成员管理&#xff08;增删改查&#xff09; 一、前言 在社交类App开发中&#xff0c;群组成员管理是核心功能之一。本文将基于UniApp框架&#xff0c;结合腾讯云IM SDK&#xff0c;详细讲解如何实现群组成员的增删改查全流程。 权限校验…...

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする

日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

【入坑系列】TiDB 强制索引在不同库下不生效问题

文章目录 背景SQL 优化情况线上SQL运行情况分析怀疑1:执行计划绑定问题?尝试:SHOW WARNINGS 查看警告探索 TiDB 的 USE_INDEX 写法Hint 不生效问题排查解决参考背景 项目中使用 TiDB 数据库,并对 SQL 进行优化了,添加了强制索引。 UAT 环境已经生效,但 PROD 环境强制索…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

docker 部署发现spring.profiles.active 问题

报错&#xff1a; org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...

以光量子为例,详解量子获取方式

光量子技术获取量子比特可在室温下进行。该方式有望通过与名为硅光子学&#xff08;silicon photonics&#xff09;的光波导&#xff08;optical waveguide&#xff09;芯片制造技术和光纤等光通信技术相结合来实现量子计算机。量子力学中&#xff0c;光既是波又是粒子。光子本…...

LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》

这段 Python 代码是一个完整的 知识库数据库操作模块&#xff0c;用于对本地知识库系统中的知识库进行增删改查&#xff08;CRUD&#xff09;操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 &#x1f4d8; 一、整体功能概述 该模块…...

c# 局部函数 定义、功能与示例

C# 局部函数&#xff1a;定义、功能与示例 1. 定义与功能 局部函数&#xff08;Local Function&#xff09;是嵌套在另一个方法内部的私有方法&#xff0c;仅在包含它的方法内可见。 • 作用&#xff1a;封装仅用于当前方法的逻辑&#xff0c;避免污染类作用域&#xff0c;提升…...