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

相关推荐

  1. ThreadLocal-内存泄露问题

    2024-03-18 23:48:01       19 阅读
  2. 内存泄露?什么是ThreadLocal

    2024-03-18 23:48:01       24 阅读
  3. 深度探讨ThreadLocal是否真的可能引发内存泄漏

    2024-03-18 23:48:01       33 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-18 23:48:01       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-18 23:48:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-18 23:48:01       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-18 23:48:01       20 阅读

热门阅读

  1. 从零开始学HCIA之SDN04

    2024-03-18 23:48:01       19 阅读
  2. Docker的常用命令

    2024-03-18 23:48:01       17 阅读
  3. C/S B/S

    2024-03-18 23:48:01       16 阅读
  4. MySQL的常用函数

    2024-03-18 23:48:01       18 阅读
  5. 计算机视觉+人工智能碰撞出新的火花

    2024-03-18 23:48:01       18 阅读
  6. 15、Linux-Shell04:分支和循环

    2024-03-18 23:48:01       21 阅读
  7. LightDB24.1 Sequence支持设置minvalue小于INT64_MIN

    2024-03-18 23:48:01       20 阅读
  8. HDOJ 2061

    2024-03-18 23:48:01       18 阅读
  9. 宠物智能喂食机方案设计

    2024-03-18 23:48:01       24 阅读
  10. ROS2纯跟踪实现(C++)

    2024-03-18 23:48:01       16 阅读