Java中的ThreadLocal为什么使用弱引用

devtools/2024/9/23 1:00:17/

   ThreadLocal中为什么使用弱引用

补个概念:

ThreadLocalMap中的key就是Entry,Entry是一个弱引用,关联了当前ThreadLocal对象。需要存储的数据为值。调用set方法要传入两个参数ThreadLocal对象和要存入ThreadLocal对象的数据。

如下图:threadLocal.set(new User(1,"main线程对象")); 这行代码(User类是一个自定义类,threadLocal是当前线程)。等于说通过Entry弱引用,既可以找到ThreadLocal对象,又可以找到存放的value值

同理:get方法可以获取数据

为什么ThreadLocal要使用弱引用?

        现在我们调用 threadlocal = null; 使静态变量和ThreadLocal对象之间的强引用关系去掉。现在这个ThreadLocal对象就可以被回收。根据弱引用的特点:假设某个对象只有弱引用关联,该对象是可以被回收的!(假设Entry和ThreadLocal之间使用强引用,没人指向这个ThreadLocal对象,但它还是不能被回收,就出现内存泄漏!)

总结一下使用弱引用的好处:如果ThreadLocal对象不再使用了(不再被引用了)。尽管它还被ThreadLocalMap引用着,它依然可以被回收。

还有一个问题:由于Entry和value之间是强引用,那么这个value对象如何被回收呢?

由于之前ThreadLocal对象已经没有强引用了,它就会被回收。现在调用set/get/remove方法时,发现当前Entry所关联的ThreadLocal已经没有了。这个Entry所关联的value对象也会被回收。

        但如果一直没有调用set、get、remove方法,那么这个Entry和value就一直不会被回收,从而可能导致内存泄漏。如何解决呢?

因此,当我们某个ThreadLocal不再使用了,就要手动调用remove方法将ThreadLocalMap和Entry之间的引用断掉。这样垃圾GC Root找不到这两个对象,就会被垃圾回收了!

总结


http://www.ppmy.cn/devtools/35437.html

相关文章

将子进程(exe)界面嵌入到主进程(另一exe)界面中——Qt

前言 近期项目中,要将子进程界面嵌入到主进程中,双方都是自己开发的,之前有过研究,曾经写过一篇文章 将外部exe嵌入到界面中(Windows)——Qt_startf_useshowwindow-CSDN博客,如今发现不好用,界面是嵌入了…

MySQL 迁移到 Oracle 需要注意的问题

MySQL /Oracle 常见问题 1. VARCHAR/VARCHAR2/NVARCHAR 差异: MySQL 的 VARCHAR 是以字符为单位计算的,Oracle 的 VARCHAR 是 以字节为单位计算的,所以对中文的存储 Oracle 是 MySQL 的 2 倍 (GBK)和 3 倍(UTF8) 2. NULL 差异 A. MySQL…

「云渲染平台」3D模型渲染是CPU还是GPU?

​在数字艺术创作和工程设计这两个领域中,将三维模型转换成逼真的二维图像的过程被称为模型渲染,这是一种对计算资源要求极高的技术活动。在渲染三维模型时,CPU和GPU各自承担着不同的任务。现在,让我们来了解在模型渲染的过程中&a…

论文架构介绍

论文架构 背景:建议2段左右完成,字数控制在500左右为佳,对应子题目1过渡段:写150字左右的过渡段,承上启下,回答部分子题目2、3的要求正文实践部分:一般3-7个论点,根据题目的要求来看…

【一步一步了解Java系列】:探索Java基本类型转换的秘密

看到这句话的时候证明:此刻你我都在努力~ 加油陌生人~ 个人主页: Gu Gu Study ​​ 专栏:一步一步了解Java 喜欢的一句话: 常常会回顾努力的自己,所以要为自己的努力留下足迹。 如果喜欢能否点个赞支持一下&#…

奶爸预备 |《伯克毕生发展心理学.从0岁到青少年》 / (美) 劳拉·E. 伯克著——读书笔记

目录 引出第一篇 人的发展理论与研究第1章 历史、理论和研究方法 第二篇 发展的基础第2章 生物基础与环境基础第3章 孕期发育、分娩及新生儿 第三篇 婴儿期和学步期:0~2岁第4章 婴儿期和学步期的身体发育第5章 婴儿期和学步期的认知发展第6章 婴儿期和学步期的情绪与…

设计网页用什么软件

在设计网页时,可以使用多种软件来完成不同的任务。以下是一些常用的网页设计软件,以及它们的特点和用途。 1. Adobe Photoshop: Adobe Photoshop 是一款功能强大的图像编辑软件。在网页设计中,它常用于创建和编辑网页所需的图像、…

python爬虫(一)之 抓取极氪网站汽车文章

极氪汽车文章爬虫 闲来没事,将极氪网站的汽车文章吃干抹尽,全部抓取到本地,还是有点小小的难度。不能抓取太快,太快容易被封禁IP,不过就算被封了问题也不大,大不了重启路由器,然后你的IP里面又…