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

ThreadLocal-内存泄露问题

ThreadLocal概述

ThreadLocal是多线程中对于解决线程安全的一个操作类,它会为每个线程都分配一个独立的线程副本从而解决了变量并发访问冲突的问题。ThreadLocal 同时实现了线程内的资源共享
案例:使用JDBC操作数据库时,会将每一个线程的Connection放入各自的ThreadLocal中,从而保证每个线程都在各自的 Connection 上进行数据库的操作,避免A线程关闭了B线程的连接。

ThreadLocal-内存泄露问题

每一个Thread维护一个ThreadLocalMap,在ThreadLocalMap中的Entry对象继承了WeakReference。(弱引用,内存不太够的时候,优先回收)其中key为使用弱引用的ThreadLocal实例,value为线程变量的副本


1. ThreadLocal 可以实现【资源对象】的线程隔离,让每个线程各用各的【资源对象】,避免争用引发的线程安全问题
2. ThreadLocal 同时实现了线程内的资源共享
3. 每个线程内有一个 ThreadLocalMap 类型的成员变量,用来存储资源对象
   a)调用 set 方法,就是以 ThreadLocal 自己作为 key,资源对象作为 value,放入当前线
    程的 ThreadLocalMap 集合中
   b)调用 get 方法,就是以 ThreadLocal 自己作为 key,到当前线程中查找关联的资源值
   c)调用 remove 方法,就是以 ThreadLocal 自己作为 key,移除当前线程关联的资源值
4. ThreadLocal内存泄漏问题
ThreadLocalMap 中的 key 是弱引用,值为强引用; key 会被GC 释放内存,关联 value 的内存并不会释放。建议主动 remove 释放 key,value

http://www.lryc.cn/news/320471.html

相关文章:

  • ISIS默认层级实验简述
  • 在Flutter中创建自定义的左对齐TabBar组件
  • 【Python】继承会遇到的问题
  • 相机模型Omnidirectional Camera(全方位摄像机)
  • 论文阅读——Align before Fuse
  • 鸿蒙Harmony应用开发—ArkTS声明式开发(基础手势:Rating)
  • Unity中的网格创建和曲线变形
  • day0 3r文档docker部署
  • PSCA复位控制集成之复位信号
  • C#,数值计算,数据测试用的对称正定矩阵(Symmetric Positive Definite Matrix)的随机生成算法与源代码
  • EventWaitHandle 和 lock使用区别
  • 【图论】树链剖分
  • Requests教程-17-请求代理设置
  • python内置函数 G
  • 深入了解 Spring boot的事务管理机制:掌握 Spring 事务的几种传播行为、隔离级别和回滚机制,理解 AOP 在事务管理中的应用
  • 机械产品CE-MD认证测试项目介绍
  • 金融知识分享系列之:MACD指标精讲
  • 王道c语言-100元有几种换法
  • c++野指针如何处理?
  • 关于大根堆,set重载运算符
  • Algae c++
  • 开发常用的一些工具总结
  • k8s Yaml语法解析
  • 【晴问算法】提高篇—动态规划专题—最长公共子序列
  • Greetings
  • JS03-函数
  • MySQL | CRUD
  • 【电路笔记】-MOSFET作为开关
  • SpringBoot+Vue项目(Vue3环境搭建 + 基础页面)
  • elementui el-table表格自动循环滚动【超详细图解】