​ Thread对象有一个变量名为threadLocals的ThreadLocalMap对象,里面定义了一个Entry数组,Entry对象弱引用了ThreadLocal。

private void set(ThreadLocal<?> key, Object value) {// We don't use a fast path as with get() because it is at// least as common to use set() to create new entries as// it is to replace existing ones, in which case, a fast// path would fail more often than not.Entry[] tab = table;int len = tab.length;int i = key.threadLocalHashCode & (len-1);for (Entry e = tab[i];e != null;e = tab[i = nextIndex(i, len)]) {ThreadLocal<?> k = e.get();if (k == key) {e.value = value;return;}if (k == null) {replaceStaleEntry(key, value, i);return;}}tab[i] = new Entry(key, value);int sz = ++size;if (!cleanSomeSlots(i, sz) && sz >= threshold)rehash();}
             if (k == null) {replaceStaleEntry(key, value, i);return;}

​ Entry弱引用了ThreadLocal,因此Entry是否存活,不会影响ThreadLocal的生命周期,ThreadLocal在没有其它对象引用后被回收,但是它对应的Entry对象中的value实际还在被Entry引用,如果不清掉Entry,value就会一直强引用,无法释放,那么就可能会内存溢出。(用完要remove()或者下次set()时会检查)

​ 弱引用在下次GC时会被回收掉,前提条件是弱引用的对象不存在其它的强引用和软引用。

实时内容请关注微信公众号,公众号与博客同时更新:程序员星星

ThreadLocal中的WeakReference相关推荐

  1. WeakReference在ThreadLocal中的使用

    1.ThreadLocal定义&作用 定义: ThreadLocal叫做线程本地变量,顾名思义,就是Thread的一个内部变量,这个ThreadLocal是属于某个线程的.就好比是某个人的老婆 ...

  2. 【Java】强软弱虚四种引用,弱引用在ThreadLocal中的应用

    Java中的引用类型 - 强软虚弱 1.强引用(StrongReference) Object strongReference = new Object(); 只要有引用指向它,就不会被回收.当内存空 ...

  3. ThreadLocal 中的ThreadLocalMap

    ThreadLocal 中的ThreadLocalMap

  4. ThreadLocal中的3个大坑,内存泄露都是小儿科!

    我在参加Code Review的时候不止一次听到有同学说:我写的这个上下文工具没问题,在线上跑了好久了.其实这种想法是有问题的,ThreadLocal写错难,但是用错就很容易,本文将会详细总结Thre ...

  5. 多个线程ThreadLocal中存的是什么

    之前所学不精,现在看一下确实是,我ThreadLocal里如果都存的是一个共享变量的话,那么肯定是会两边都相同的.其实现在回头看这些代码就没有了当初学术不精时候的疑惑了,反正也被喷了,趁这个被喷的时间 ...

  6. 用户登录信息保存在ThreadLocal中

    说明 : 简单说下我写这篇文章的来由吧,最近准备新开一个项目前后端分离的,后端通过springboot实现,前段就不说了,那么就会考虑到用户登录成功以后登录信息保存在什么地方,是通过前后端一直传递参数 ...

  7. 关于Java中的WeakReference类的笔记(弱引用)

    前言 今天在看ThreadLocal源码的时候,其中内部类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞清楚ThreadLocal,只能先了解下了WeakRefer ...

  8. 关于Java中的WeakReference

    WeakReference 阅读原文请访问我的博客BrightLoong's Blog 一. 简介 在看ThreadLocal源码的时候,其中嵌套类ThreadLocalMap中的Entry继承了We ...

  9. java中的WeakReference(弱引用)

    java中的weakReference-弱引用 1.介绍 阅读ThreadLocal源码中,其中嵌套类ThreadLocalMap中的Entry继承了WeakReferenc,为了能搞明白Thread ...

最新文章

  1. 张北将成规模150万台服务器的云计算产业基地
  2. java中static作用详解
  3. Oracle 日志原理剖析
  4. 2014多校第一场A题 || HDU 4861 Couple doubi
  5. 【渝粤教育】国家开放大学2019年春季 1332中文学科论文写作 参考试题
  6. 如何设置多级标题_办公技巧|标题样式amp;多级列表结合,再也不用手动修改1.1、1.2 ...!...
  7. 生产环境linux下安装两个及两个以上tomcat实践
  8. java工程如何跑起来的_你编写的Java代码是咋跑起来的?
  9. 动态图连通性(线段树分治+按秩合并并查集)
  10. Debian系统关闭iptables的conntrack跟踪
  11. Android:RGB颜色对照表
  12. Vivado使用记录(二)下载与固化
  13. WPS国外版更改语言设置mac
  14. 用计算机进行坐标反算,反算在测量中的运用(坐标反算桩号)
  15. Mysql 数据库迁移
  16. 西安交大计算机考研分数线2020院线,西安交大考研分数线2020院线_全国硕士研究生招生考试网...
  17. web页面跳转支付宝网页支付
  18. 数据包络分析——二阶段网络带feedback
  19. 深入理解Linux内核通知链(Notifier)
  20. IoT with Mongodb cloud

热门文章

  1. sfm三维重建源码_OpenMVG源码阅读小记
  2. 教你如何把女朋友训练得服服帖帖
  3. 链接两个“名字完全一样”的【动态库】,你会怎么处理?
  4. C 语言:#ifndef 指令
  5. 湖南大学21夏训练三14.A除以B
  6. 爬取某东购买猪肉的用户评论,为生产经营提供了方向性参考
  7. 伪代码计算机流程图排序数组,排序伪代码总结
  8. linux redhat nginx,redhat 安装nginx过程完整记录
  9. linux内核中printk的打印级别
  10. 高德api中所在位置圆形范围可移动_这个十一黄金周,2000钢铁技术直男如何让高德地图变成一种生活方式...