关于ThreadLocalMap<ThreadLocalObject>弱引用问题:

当线程没有结束,但是ThreadLocal已经被回收,则可能导致线程中存在ThreadLocalMap<nullObject>的键值对,造成内存泄露。(ThreadLocal被回收,ThreadLocal关联的线程共享变量还存在)。

虽然ThreadLocal的get,set方法可以清除ThreadLocalMap中key为null的value,但是get,set方法在内存泄露后并不会必然调用,所以为了防止此类情况的出现,我们有两种手段。

1、使用完线程共享变量后,显示调用ThreadLocalMap.remove方法清除线程共享变量;

2、JDK建议ThreadLocal定义为private static,这样ThreadLocal的弱引用问题则不存在了。

最常见的ThreadLocal使用场景为 用来解决 数据库连接、Session管理等。

private static ThreadLocal<Connection> connectionHolder= new ThreadLocal<Connection>() {public Connection initialValue() {return DriverManager.getConnection(DB_URL);}};public static Connection getConnection() {return connectionHolder.get();
}

private static final ThreadLocal threadSession = new ThreadLocal();public static Session getSession() throws InfrastructureException {Session s = (Session) threadSession.get();try {if (s == null) {s = getSessionFactory().openSession();threadSession.set(s);}} catch (HibernateException ex) {throw new InfrastructureException(ex);}return s;
}

http://blog.csdn.net/lhqj1992/article/details/52451136

http://www.cnblogs.com/onlywujun/p/3524675.html

https://www.cnblogs.com/coshaho/p/5127135.html

http://www.cnblogs.com/dolphin0520/p/3920407.html

转载于:https://www.cnblogs.com/genggeng/p/7477191.html

深入剖析ThreadLocal实现原理以及内存泄漏问题相关推荐

  1. ThreadLocal工作原理和内存泄漏的预防

    ThreadLocal是什么? ThreadLocal是一个用于提供线程局部变量的一个工具类,用于保证线程安全,在他里面包含了一个ThreadLocalMap,真正的引用确是在Thread中,一般用p ...

  2. c++ thread 内存泄漏_深入剖析ThreadLocal原理、内存泄漏及应用场景

    本文主要针对JDK1.8讲解 ThreadLocal作用 先看一个简单的示例,创建两个线程,第一个线程向ThreadLocal中写入数据,第二个线程等待第一个线程完成从ThreadLocal中读取数据 ...

  3. ThreadLocal到底有没有内存泄漏?从源码角度来剖析一波

    1. 前言 ThreadLocal 也是一个使用频率较高的类,在框架中也经常见到,比如 Spring. 有关 ThreadLocal 源码分析的文章不少,其中有个问题常被提及:ThreadLocal ...

  4. ThreadLocal到底有没有内存泄漏?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 1. 前言 ThreadLocal 也是一个使用频率较高 ...

  5. Java Review - 线程池中使用ThreadLocal不当导致的内存泄漏案例源码分析

    文章目录 概述 Why 内存泄露 ? 在线程池中使用ThreadLocal导致的内存泄漏 概述 ThreadLocal的基本使用我们就不赘述了,可以参考 每日一博 - ThreadLocal VS I ...

  6. ThreadLocal基本使用和内存泄漏分析

    ThreadLocal基础部分 ThreadLoal的作用 保存线程的独立变量,即每个线程维护一份.这种变量在线程的生命周期内起作用,减少同一个线程内多个函数之间公共变量传递麻烦. 使用场景 需要给不 ...

  7. 深入分析 ThreadLocal 内存泄漏问题

    转载自 http://www.importnew.com/22039.html ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件 ...

  8. 【转载】深入分析 ThreadLocal 内存泄漏问题

    前言 ThreadLocal 的作用是提供线程内的局部变量,这种变量在线程的生命周期内起作用,减少同一个线程内多个函数或者组件之间一些公共变量的传递的复杂度.但是如果滥用 ThreadLocal,就可 ...

  9. ThreadLocal为什么会内存泄漏(java高级面试)

    一.案例代码 1.首先看一下代码,模拟了一个线程数为500的线程池,所有线程共享一个ThreadLocal变量,每一个线程执行的时候插入一个大的List集合: 2.设置JVM参数设置最大内存为256M ...

最新文章

  1. html5 div 鼠标跟随,CSS实用:DIV+CSS打造跟随鼠标的层
  2. python比较好的视频教程-哪里有免费的python3教程啊?最好是有例子的视频教学...
  3. cache + db 性能
  4. IT人员健康信号之颈椎病自疗
  5. Python3NumPy的常用函数
  6. 微信公众号Java开发-笔记01【微信公众号介绍、开发环境搭建】
  7. linux 进程间通信之pipe
  8. Python 函数(参数组合)
  9. 李开复:一生换四五次工作在21世纪很正常
  10. oracle 如何更改为归档模式
  11. 一维搜索——进退法matlab实现(含代码)
  12. 【优化求解】基于NSGA2算法求解多目标优化问题matlab源码
  13. 现在90后程序员有必要考证吗?
  14. 不要以为过了技术面就安全了,HR面也会挂人的!!
  15. 论文翻译器:pdf 英文论文一键转换成中英文对照的文档
  16. Windows使用Dism备份操作系统快捷命令 系统备份
  17. 7天快速掌握MySQL-DAY2
  18. Apache Doris 的一场编译之旅
  19. Linux删除Nginx有残留怎么办?
  20. java唱哪首歌好听_非常适合KTV演唱的100首新歌,Hold住全场,非常好听!

热门文章

  1. JetBrains - IDEA 常用快捷键汇总
  2. 【51Nod - 1103】N的倍数 (思维,鸽巢原理也叫抽屉定理,求倍数问题取模)
  3. 【51Nod - 1272 】最大距离 (思维,排序sort的空间优化)
  4. 【HDU - 1850】Being a Good Boy in Spring Festival (尼姆博弈,nim,异或前缀和)
  5. 【HDU - 1272】小希的迷宫 (并查集判环)
  6. 机器学习笔记(七):神经网络:表示
  7. 大量html乱码seo,HTTPS改造之后网页错位乱码,影响SEO和正常访问,应该这样改
  8. android l 效果,[原]Android L中水波纹点击效果的实现
  9. 腾讯面试Android必问11题,我说的,不信就来看看
  10. 剑指offer:45-48记录