ThreadLocal 学习常见问题
ThreadLocal 这个此类提供线程局部变量。这些变量不同于通常的对应变量,因为每个访问一个变量的线程(通过 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是希望将状态与线程(例如,用户 ID 或事务 ID)关联的类中的私有静态字段。
使用时每个线程复制一个变量副本。每个线程只能使用自己复制的副本,不会用到其他线程的副本。也就不存在多线程贡献问题。
一般应用场景:线程池,数据库连接池,SimpleDateFormat使用
threadLocal 主要通过由ThreadLocalMap来实现,ThreadLocalMap是一个静态内部类。

threadLocal 推导
1.存储功能
。通过数据结构去存储——ThreadLocalMap (Hash表)
Hash表如何理解:就是一个数组,数组的下标是由Hash值运算得来的 ThreadLocalMap和ThreadLocal有什么关联呢
ThreadLocal是UC下面的一个普通的工具类,ThreadLocalMap是ThreadLocaJ里面的一个静态的内
部类
ThreadLocalMap实际上就是我们上面讲的那个Hash表,而这个Hash表里面存的是一个个的Entry节
点
Entry节点实际上也是一个内部类,对key和value值进行包装
2.在ThreadLocal中如何解决Hash冲突的呢
通过线性探测法去解决hash冲突
3.Hash冲突是怎么产生的
就是通过Key去求Hash值的时候,然后又通过Hash值去计算下标的时候,可能不同的key值算出来相同的下标4.下标又是怎么计算的呢?
key.hashcode=hash值(int类型的数据)int类型是4字节的,32位的数据
4.下标又是怎么计算的呢?
key.hashcode=hash值(int类型的数据)int类型是4字节的,32位的数据
下标的计算:通过hash值&(数组长度-1)16-1 =158-1=7 10-1 =91001
11010111 11010111 11010111 11010111
1001
=1001
为什么通过hash值&(数组长度-1)通过这样计算?
这样计算减少hash碰撞
强:引用指向new关键字创建的对象,则该引用就叫强引用,即使内存满足,要溢出了,也不会回收强引用指向的对象
软:软引用在内存充足的时候不会被回收,当内存不足的时候会被回收
弱:不管内存充不充足,只要垃圾回收,就会被回收掉
6. ThreadLocalMap中的key为什么要用弱引用呢?
采用弱引用能减少内存泄漏,因为复制的副本中的key存放在ThreadLocalMap中,如果用强引用线程副本的应用就不会断开即使,外部变量复制为空,也不能进行内存回收,导致内存泄漏。
为什么不是解决内存泄漏。因为value是强引用。
entry中key是弱引用,value是强引用

7.为什么不吧value值也设计成弱引用呢?
value设置成弱引用,当key没有被回收时,通过get获取时value可能为空值
8.那怎么解决内存泄漏呢?
通过手动调用remove方法就能解决内存泄漏
相关文章:
ThreadLocal 学习常见问题
ThreadLocal 这个此类提供线程局部变量。这些变量不同于通常的对应变量,因为每个访问一个变量的线程(通过 get 或 set 方法)都有自己独立初始化的变量副本。ThreadLocal 实例通常是希望将状态与线程(例如,用户 ID 或事务 ID)关联的类中的私有静态字段。使…...
文件包含漏洞1 | iwebsec
文章目录00-文件包含漏洞原理环境01-本地文件包含读取敏感文件信息配合文件上传getshell配合日志文件getshell配合SSH日志配合运行环境00-文件包含漏洞原理 为什么要文件包含? 为什么会有文件包含漏洞? 因为将被包含的文件设置为变量,用来进行动态调用…...
基于MindAR实现的网页端WebAR图片识别叠加动作模型追踪功能(含源码)
前言 由于之前一直在做这个AR/VR 相关的功能开发,大部分的时候实现方式都是基于高通Vuforia或者EasyAR等基于Unity3d的引擎的开发,这样开发的程序大部分都是运行在APP上,安卓或者ios的开发也能一次性搞定。不过当时大部分的需求都是需要在网…...
ssh 远程连接方式总结
SSH 概述 SSH(安全外壳协议 Secure Shell Protocol,简称SSH)是一种加密的网络传输协议,用于在网络中实现客户端和服务端的连接,典型的如我们在本地电脑通过 SSH连接远程服务器,从而做开发,Wind…...
springboot+mybatisPlus简单实现数据分页显示
项目地址:https://gitee.com/flowers-bloom-is-the-sea/geo_demo/tree/v1.0/ 这个项目的测试是可以的。 先来查看一些tb_shop表: id name x y ------ ------ ------ --------里面是空数据,那么现在对数据里插入一些数据…...
axios的基本使用
axios 安装axios npm install axios 使用时先导入 import axios from ‘axios’ axios请求方式 axios支持多种请求方式 axios(config) axios.request(config) axios.get(url[, config]) axios.head(url, [, config]) axios.post(url[, data[, config]]) axios.put(url[, dat…...
核心 Android 调节音量的过程
核心 Android 系统提供的调节音量的方法 核心 Android 系统提供了多种调节音量的方法,这些方法主要包括如下这些。 如在 Android Automotive 调节音量的过程 中我们看到的,CarAudioService 最终在 CarAudioDeviceInfo 中 (packages/services/Car/servi…...
用C/C++制作一个简单的俄罗斯方块小游戏
用C/C制作一个简单的俄罗斯方块小游戏 用C/C制作一个简单的俄罗斯方块小游戏 0 准备1 游戏界面设计 1.1 界面布局1.2 用 EasyX 显示界面1.3 音乐播放 2 方块设计 2.1 方块显示2.2 随机生成一个方块2.3 方块记录 3 方块移动和旋转 3.1 方块的移动3.2 方块的旋转3.3 方块的碰撞和…...
使用免费负载生成器swingbench对oracle数据库进行压力测试(测试Oracle的功能或评估性能)
1.Swingbench 简介 Swingbench 是一个免费负载生成器(和基准测试),旨在对 Oracle 数据库 进行压力测试。目前最新版本 Swingbench 2.6。 SwingBench 由负载生成器,协调器和集群概述组成。该软件可以生成负载 并绘制交易/响应时间…...
【预告】ORACLE Primavera P6 v22.12 虚拟机发布
引言 离ORACLE Primavera P6 EPPM最新系统 v22.12已过去了3个多月,应盆友需要,也为方便大家体验,我近日将构建最新的P6的虚拟环境,届时将分享给大家,最终可通过VMWare vsphere (esxi) / workstation 或Oracle virtua…...
机器学习100天(四十):040 线性支持向量机-公式推导
《机器学习100天》完整目录:目录 机器学习 100 天,今天讲的是:线性支持向量机-公式推导! 首先来看这样一个问题,在二维平面上需要找到一条直线划分正类和负类。 我们找到了 A、B、C 三条直线。这三条直线都能正确分类所有训练样本。但是,哪条直线最好呢?直观上来看,我…...
失败经验之震荡玩家往往死于趋势市场
亏损,是从去年开始的吧。 尤其是去年,仅仅一年,就亏掉了自从交易以来的所有盈利。 现在,我甚至不敢去计算具体的亏损金额。 保守估计,已经亏损100万左右。 现在回想,似乎也是必然。 交易本来就是一个走…...
应用层与传输层~
文章目录应用层自定义应用层协议什么是自定义应用层协议自定义方式运输层运输层概述运输层特点运输层协议UDP协议UDP的特点UDP首部格式校验规则TCP协议TCP的特点TCP协议段格式TCP的性质确认序号超时重传连接管理三次握手四次挥手TCP的状态滑动窗口流量控制拥塞控制延迟应答捎带…...
IO文件操作
认识文件 狭义的文件 存储在硬盘上的数据,以“文件"为单位,进行组织 常见的就是普通的文件 (文本文件,图片, office系列,视频,音频可执行程序…)文件夹也叫做"目录" 也是一种特殊的文件。 广义的文件 操作系统,是要负责管理软硬件资源,操作系统(…...
【构建工具】webpack 3、4 升级指南,摆脱低版本的困扰
一、依赖处理 1.升级通用依赖 借用 ncu 库实现,帮你改写需要升级的package.json 然后再 npm install ncu -u <packages> # 可以指定依赖 ncu # 升级全部依赖大概列了下升级的效果 add-asset-html-webpack-plugin ^2.1.3 → ^5.0.2 clean-webpack-…...
Javaweb第一个项目——实现简单的登陆功能
第一步:打开idea-->文件-->新建 第二步: 在Demo文件夹 点击右键-->添加框架支持-->找到Web应用程序 勾选 第三步:配置Tomcat 第四步:新建一个lib(建在web-INF文件夹下)文件夹 用于存放jar包…...
OpenKruise 开发者不容错过的带薪实习机会!马上加入 LFX Mentorship 计划
LFX Mentorship 计划由 Linux Foundation 组织发起,为像 OpenKruise 这样的 CNCF 托管项目提供了激励开源贡献、扶植社区发展的优秀土壤。参与其中的开发者不仅有机会在经验丰富的社区 Mentor 指导下贡献开源项目、为职业生涯加分,完成工作后还能获得 $3…...
《c++ primer笔记》第八章 IO库
前言 简单看一下就行 文章目录一、IO类1.1基本概念1.2管理输出缓冲二、文件输入输出2.1文件模式三、string流3.1istringstream3.2ostringstream一、IO类 1.1基本概念 我们常见的流有istream和ostream,这两个流都是有关输入和输出的,此外,…...
web开发 用idea创建一个新项目
这个写着就是给自己当备忘录用的QAQ 这个老师上课一通操作啥也没看清…卑微搞了半天看样子是成功了 记录一下省的以后忘了怎么创建(? zufe lxy 2023.3 先行条件是已经自己装好了Tomcat和idea!!(我的idea是申请了教育…...
【FMCW 03】测速
从上一讲 测距 末尾的frame讲起。我们知道一个chirp对应了一个采样后的IF信号,我们将这些采样后的IF信号按chirp的次序排列成一个帧(frame),这就得到了我们实际中接收后处理的FMCW信号。 由于chirp的发射返回时间很短,…...
告别数据洪流:手把手教你用ZCANPRO的视图筛选与实时曲线功能高效分析CAN报文
告别数据洪流:手把手教你用ZCANPRO的视图筛选与实时曲线功能高效分析CAN报文 在车载电子和嵌入式开发领域,CAN总线数据的分析工作常常让工程师们头疼不已。想象一下,当你的测试设备捕获到成千上万条CAN报文时,如何从中快速定位到关…...
# 发散创新:基于Python与Open3D的数字孪生可视化实时仿真系统构建在工业4.0和智能制造浪潮中,**
发散创新:基于Python与Open3D的数字孪生可视化实时仿真系统构建 在工业4.0和智能制造浪潮中,数字孪生(Digital Twin) 已成为连接物理世界与虚拟模型的核心技术之一。本文将围绕一个轻量级、高扩展性的数字孪生应用原型系统展开讲解…...
基于MATLAB的图像加密解密系统 可以正确无误的对图像进行加密和解密 带GUI界面
基于MATLAB的图像加密解密系统 可以正确无误的对图像进行加密和解密 带GUI界面,一步一步完整运行你是否有过这样的疑问——如何让一张普通图片变成外星密文?在MATLAB里玩转图像加密真的可以像搭积木一样简单。今天咱们就来捣鼓一个带界面的图像加密系统&…...
突破reCAPTCHA屏障:EzCaptcha自动化识别实战指南
1. 为什么我们需要自动化处理reCAPTCHA? 每次在网上注册账号或者提交表单时,那个让你"勾选我不是机器人"的小方框,就是reCAPTCHA验证系统。作为谷歌推出的智能验证工具,它确实有效阻止了大量垃圾注册和恶意攻击…...
Janus-Pro-7B模型部署精讲:VMware虚拟机中的隔离环境搭建
Janus-Pro-7B模型部署精讲:VMware虚拟机中的隔离环境搭建 想在自己的电脑上测试Janus-Pro-7B这类大模型,但又担心搞乱本地环境,或者影响其他工作?用虚拟机搭建一个隔离的测试环境,是个非常稳妥的选择。它就像在你的电…...
Shopee风控算法逆向 - Unidbg补环境实战解析
1. Shopee风控算法逆向分析入门 最近在研究Shopee的风控机制时,我发现他们的Native层加密算法特别有意思。作为一个常年和移动安全打交道的开发者,今天想和大家分享下使用Unidbg模拟执行Shopee风控算法的完整过程。 Shopee作为东南亚头部电商平台&…...
突破性Unity游戏插件框架实战指南:BepInEx从零到精通的完全手册
突破性Unity游戏插件框架实战指南:BepInEx从零到精通的完全手册 【免费下载链接】BepInEx Unity / XNA game patcher and plugin framework 项目地址: https://gitcode.com/GitHub_Trending/be/BepInEx BepInEx是一款专为Unity游戏设计的革命性插件框架&…...
10个TOTK-Mods-collection实用技巧:提升游戏性能与画面质量
10个TOTK-Mods-collection实用技巧:提升游戏性能与画面质量 【免费下载链接】TOTK-Mods-collection Mod repo for TOTK on Yuzu emulator. 项目地址: https://gitcode.com/gh_mirrors/to/TOTK-Mods-collection TOTK-Mods-collection 是一个专为《塞尔达传说&…...
查重率亮红灯反复修改,有哪些真正闭眼可入的的AI智能降重工具推荐?
毕业论文降重,核心在于语义优化 去AI痕迹 降低查重率,工具选择直接影响修改效率。推荐免费与付费工具结合使用,既能节省成本又保证效果。下面按中文、英文、免费/付费分类整理,附上实测效果与适用场景。 一、中文论文降重工具&a…...
模型微调加持:百川2-13B+OpenClaw定制化个人助手实践
模型微调加持:百川2-13BOpenClaw定制化个人助手实践 1. 为什么需要定制化个人助手? 去年我尝试用现成大模型搭建自动化助手时,发现一个尴尬现象:当我让AI帮我整理会议纪要时,它总把技术术语解释得像科普读物…...
