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

使用ThreadLocal的一些注意事项

一、概述

        ThreadLocal可以说是非常趁手的工具,通过它,每个线程可以独立访问自己的变量副本,利用这个特性,我们就可以用ThreadLocal来存储userId等用户信息,方便我们后续使用。不过,既然是个工具,那当然得明白怎么使用,若是使用不当就有可能导致内存泄漏问题。

二、内存泄漏问题的产生

        说到这,那就得看看ThreadLocal是如何导致内存泄漏问题的。首先,前端携带token来访问受保护的资源,后端解析token没有问题,就会获取token中的载荷claims,并从claims中获取用户信息(如userId等),然后将其存入ThreadLocal中。接下来就是关键的地方了,后端在处理完请求后,如果没有清理掉ThreadLocal中的数据,并且使用的还是线程池的话,就会产生内存泄漏问题了。

        为什么这样就会产生内存泄漏问题呢?主要原因还是线程池,如果使用线程池的话,平时处理请求的线程都是从线程池中拿出来的,处理完后线程又放回线程池,如果存在ThreadLocal中的数据没有清除,那就会一直在那里占用内存,导致内存泄漏,长此以往的话,就会导致内存溢出,可以说非常严重了。

三、内存泄漏问题的解决

        要想解决这个问题其实不难,从上面可以发现我着重强调了没有清理掉ThreadLocal中的数据使用线程池这两点,正是这两点的共同作用导致了内存泄漏。方法有两种,一种是每次处理完请求后清理掉ThreadLocal中的数据,另一种是不使用线程池。在我看来,就好的方法就是每次处理完请求后清理掉ThreadLocal中的数据,这样就不用管有没有使用线程池了,简单方便。

        通过前面的讨论,第一种方法显而易见地看出能够解决内存泄漏,那第二种方法为什么也可以呢?如果使用第二种方法,处理请求前会创建个线程出来,使用完后将线程销毁,此时,不管有没有清理数据都没关系了,因为线程都被销毁了,那些数据自然也不复存在。

四、总结

        ThreaLocal是个很好的工具,但使用不当极有可能导致内存泄漏,应在处理完请求后及时清除存入ThreaLocal中的数据,避免内存泄漏;同时应该减少 ThreadLocal 的使用频率,避免频繁读写,因为ThreadLocal 的 get() 和 set() 操作涉及哈希表查找,在高并发场景下可能影响性能。

http://www.dtcms.com/a/506928.html

相关文章:

  • Kotion 常见用法注意事项(持续更新...)
  • 如何使用思维导图提升信息整理效率
  • K-VXE-TABLE二次封装,含table‘自定义列功能
  • 基于 GEE 开发的一种利用 OTSU 算法实现水体提取的便捷工具
  • Linux小课堂: 深入解析 top、htop、glances 及进程终止机制
  • 建设协会网站洛阳伟创科技
  • MongoDB 提供的 `GridFSTemplate` 操作 GridFS 大文件系统的常用查询方式
  • 2025年ASOC SCI2区TOP,基于模糊分组的多仓库多无人机电力杆巡检模因算法,深度解析+性能实测
  • 无人机地面站中不同的飞行模式具体含义释义(开源飞控常用的5种模式)
  • Inventor 转换为 3DXML 全流程技术指南:附迪威模型网在线方案
  • Maven POM 简介
  • pytorch踩坑记录
  • seo每天一贴博客南宁网站排名优化电话
  • 手机端网站开发书籍徐州vi设计公司
  • STM32F1和STM32F4在配置硬件SPI1时有什么不同?
  • 衣柜灯橱柜灯MCU方案开发
  • 数据访问对象模式(Data Access Object Pattern)
  • 滚动显示效果
  • Spring Cloud - Spring Cloud 微服务概述 (微服务的产生与特点、微服务的优缺点、微服务设计原则、微服务架构的核心组件)
  • YOLOv4:目标检测领域的 “速度与精度平衡大师”
  • agent设计模式:第二章节—路由
  • 玩转Docker | 使用Docker安装uptime-kuma监控工具
  • flutter开发小结
  • 【运维】鲲鹏麒麟V10 操作系统aarch64自制OpenSSH 9.8p1 rpm包 ssh漏洞修复
  • react学习(五) ---- hooks
  • 【C语言】程序的编译和链接(基础向)
  • 基于单片机的热量计测量系统设计
  • 显卡功能及原理介绍
  • 丽水网站建设明恩玉杰百度网址导航
  • 时序数据库选型指南:从大数据视角看IoTDB的核心优势