聊一聊ThreadLocal的原理?

1.ThreadLocal创建方式

ThreadLocal<String> threadlocal1= new ThreadLocal();
ThreadLocal<String> threadlocal2= new ThreadLocal();
ThreadLocal<String> threadlocal3= new ThreadLocal();

2.首先介绍一下,ThreadLocal的原理:

如下图所示,每一个线程都会有一个ThreadLocal.ThreadLocalMap 类型的变量threadlocals,每一个线程都有一个属于自己的ThreadLocalMap。

每创建一个Threadlocal对象,就相当于创建了一个Entry,这个Entry的key是ThreadLocal的弱引用,value是ThreadLocal的泛型值。

每一个线程在往ThreadLocal里设置值的时候,都是往自己的ThreadLocalMap中设置值,读也是以某个ThreadLocal作为引用,在自己的map里找对应的key,从而实现线程隔离的作用。

3.从JVM内存的层面说一说ThreadLocal

在JVM中,栈内存线程私有,存储了对象的引用,包括(当前线程、ThreadLocal线程)。堆内存线程共享,存储了对象的实例。

这里有几个问题

1.为什么会产生内存泄漏问题?

因为ThreadLocalMap中的每一个key都是ThreadLocal弱引用,当发生垃圾回收时,不管JVM的内存空间是否充足,都会回收该对象占用的内存。如果发生了垃圾回收,ThreadLocal被垃圾回收时,而ThreadLocalMap的生命周期和Thread一样,这就造成了内存泄漏的问题。解决方案是使用完ThreadLocal后,及时调用remove()方法释放内存空间。

2.为什么key要弱引用呢?

如果不弱引用,是强引用,当ThreadLocal释放掉内存后,ThreadLocal一直被key强引用着。这也会内存泄漏。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/728319.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用Python监测网络连接和网速

大家好&#xff0c;网络连接和网速在工作中非常重要&#xff0c;本文将介绍如何使用Python程序来监测互联网连接的速度和中断情况。 1.导入所需库文件 首先&#xff0c;需要导入以下库&#xff1a; import speedtest import time from datetime import datetime这里选择了第…

关于 node 权限问题

执行npm install 命令错误-ERRNO-4080_npm err! if you believe this might be a permission-CSDN博客

JavaScript常见的DOM操作

文档对象模型 (DOM) 是 HTML 和 XML 文档的编程接口 常见的操作分为 创建节点 查询节点 更新节点 添加节点 删除节点 创建节点 createElement 创建新元素&#xff0c;接受一个元素&#xff0c;即要创建元素的标签名 createTextNode 创建一个文本节点 获取节点 qu…

Qt+Opencv实现视频二维码检测

编译器&#xff1a;Qt 5.12.2Visual Studio 2015 视觉库&#xff1a;OpenCV 4.5.5 能够加载MP4格式视频、读取、定位二维码并输出与反馈信息的软件 需要演示Demo可私信

《幸运的基督徒》Python

题目描述 有15个基督徒和15个非基督徒在海上遇险&#xff0c; 为了能让一部分人活下来不得不将其中15个人扔到海里面去&#xff0c; 有个人想了个办法就是大家围成一个圈&#xff0c;由某个人开始从1报数&#xff0c; 报到9的人就扔到海里面&#xff0c;他后面的人接着从1开始报…

软件测试相关概念和bug的相关总结

文章目录 什么是测试什么是需求测试用例(CASE)什么是BUG软件的生命周期开发模型瀑布模型螺旋模型增量模型和迭代模型 敏捷测试模型v模型W模型(双V模型) 软件测试的生命周期如何描述一个bugbug的级别bug的生命周期.产生争执怎么办 什么是测试 测试是测试人员用来检验软件的实际运…

Redis基本概念

什么是Redis 官方文档 Redis(Remote Dictionary Server) Redis 是一个开源的使用 ANSIC 语言编写、遵守 BSD 协议、支持网络、可基于内存亦可持久化的日志型、Key-Value 数据库&#xff0c;并提供多种语言的 API 的非关系型数据库。 传统数据库遵循 ACID 规则。而 Nosql&…

最长异或路径 ---- (字典树求异或最大)

目录 最长异或路径&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 代码实现&#xff1a; 最长异或路径&#xff1a; 题目大意&#xff1a; 思路解析&#xff1a; 现在假设有一棵这样的树&#xff0c;我们并不关心每条边的路径权值为多少&#xff0c;假设划红线的…

WPS/Office 好用的Word插件-查找替换

例如&#xff1a;一片文档&#xff1a;…………泰山…………泰&#xff08;少打了山字&#xff09;………… 要是把“泰”查找替换为“泰山”&#xff0c;就会把前面的“泰山”变成“泰山山”&#xff0c;这种问题除了再把“泰山山”查找替换为“泰山”&#xff0c;有没有更简单…

MSF编译中遇到的问题整理,视觉惯性松组合//视觉惯性松耦合

首先感谢 https://blog.csdn.net/xiaoxiaowenqiang/article/details/81192045#comments_31558035 神帖需要进一步更新&#xff0c;希望大家可以给作者打钱&#xff0c;然后可诶诒理直气壮的顺便push原作者更新 下面是readme的内容 ethzasl_msf [ROS] 多传感器卡尔曼融合框架 E…

吴恩达deeplearning.ai:机器学习项目的完整周期伦理

以下内容有任何不理解可以翻看我之前的博客哦&#xff1a;吴恩达deeplearning.ai专栏 文章目录 语音识别部署公平、偏见、伦理 这节博客中&#xff0c;我们主要看看构建一个机器学习的完整周期是什么&#xff0c;也就是说&#xff0c;当你想构建一个有价值的机器学习系统时&am…

Freecad Assembly4装配模型设计入门

一、基本信息 本文内容&#xff1a;学习Assembly4装配模型设计功能。 2024年3月7日 最新版Freecad 0.21.2 最新版 Assembly4 0.50.8 下载地址&#xff1a;stoneold/FreeCAD_Assembly4 最新版 Assembly4 示例教程 下载地址&#xff1a;FreeCAD_Examples: Freecad Assmbly4 …

菜品上架与展示

菜品上架与展示 1、功能简介 1、实现菜品的上架 2、实现菜品的展示 2、代码展示 2.1 food类 package com.ham.pkg.ArryList;public class Food {private String name;private double price;private String desc;public Food(String name, double price, String desc) {this.…

CubeMX使用教程(3)——GPIO

在第二章我们完成了点灯仪式&#xff0c;这次我准备尝试把按键和灯结合起来&#xff0c;做一次GPIO的综合测试 实验任务为&#xff1a;按下按键1&#xff08;B1&#xff09;&#xff0c;第1个灯&#xff08;LD1&#xff09;亮&#xff1b; 按下按键2&#xff08;B2&#xff09;…

Vue3.0 vue.js.devtools无法显示Pinia调试工具

之前的配置方式&#xff1a; app.use(createPinia()) app.mount(#app) 更新配置方式&#xff1a; app.use(createPinia()).mount("#app") 设置之后即可显示调试工具

25考研资料PDF汇总

资料V馊public号ZL研知己 V馊public号ZL研知己 25考研资料PDF汇总

PTA L2-015 互评成绩

学生互评作业的简单规则是这样定的&#xff1a;每个人的作业会被k个同学评审&#xff0c;得到k个成绩。系统需要去掉一个最高分和一个最低分&#xff0c;将剩下的分数取平均&#xff0c;就得到这个学生的最后成绩。本题就要求你编写这个互评系统的算分模块。 输入格式&#xf…

好物周刊#44:现代终端工具

https://github.com/cunyu1943 村雨遥的好物周刊&#xff0c;记录每周看到的有价值的信息&#xff0c;主要针对计算机领域&#xff0c;每周五发布。 一、项目 1. Github-Hosts 通过修改 Hosts 解决国内 Github 经常抽风访问不到&#xff0c;每日更新。 2. 餐饮点餐商城 针对…

unity Game视图看不到贴花,但是在Scene视图能看到

解决方法&#xff1a;找到URP的配置文件 &#xff0c;修改Quality–RederScale为1&#xff0c;就可以了&#xff0c;这是unity 的bug&#xff0c;2022版本以后就没有这个问题了

阿珊带你深入理解 async/await 函数

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…