ThreadLocal 的原理

简介: ThreadLocal 用于实现多线程环境下变量隔离,每个线程拥有独立资源,避免共享导致的竞争问题。其原理是通过线程内部的 ThreadLocalMap 存储资源,以 ThreadLocal 为 key,资源为 value。使用时需注意调用 remove() 清理资源,防止内存泄漏。

ThreadLocal 的主要目的是用来实现多线程环境下的变量隔离

  • 【解释】即每个线程自己用自己的资源,这样就不会出现共享,没有共享,就不会有多线程竞争的问题

原理

  • 每个线程对象内部有一个 ThreadLocalMap,它用来存储这些需要线程隔离的资源
  • 资源的种类有很多,比如说数据库连接对象、比如说用来判断身份的用户对象 ...
  • 怎么区分它们呢,就是通过 ThreadLocal,它作为 ThreadLocalMap 的 key,而真正要线程隔离的资源作为 ThreadLocalMap 的 value
  • ThreadLocal.set 就是把 ThreadLocal 自己作为 key,隔离资源作为值,存入当前线程的 ThreadLocalMap
  • ThreadLocal.get 就是把 ThreadLocal 自己作为 key,到当前线程的 ThreadLocalMap 中去查找隔离资源
  • ThreadLocal 一定要记得用完之后调用 remove() 清空资源,避免内存泄漏
相关文章
|
11月前
|
域名解析 运维 负载均衡
阿里云DNS云解析有必要购买吗?免费版和收费版域名解析有啥区别?
阿里云DNS免费版适合基础解析需求,付费版提供100% SLA保障、更小TTL(最低1秒)、更多解析线路及IP支持,具备攻击防御、DNSSEC等高级功能。个人版低至19.9元/年,企业版适合高可用场景,尊享版支持专家服务与无限解析记录,适用于对稳定性要求高的业务。
2864 2
|
人工智能 JavaScript 前端开发
JavaScript 中 `apply`、`call` 和 `bind` 的具体理解与区别
`apply`、`call` 和 `bind` 是 JavaScript 中用于改变函数 `this` 指向的方法。`apply` 以数组形式传递参数并立即执行函数;`call` 则以逗号分隔的参数列表传递并立即执行;而 `bind` 不会立即执行,而是返回一个绑定好 `this` 和部分参数的新函数,适用于延迟调用。三者在参数传递方式和执行时机上有所不同,适用于不同的开发场景,如动态绑定上下文、参数不定的函数调用、事件处理等。掌握它们的使用可以提升代码灵活性与复用性。
597 0
|
数据可视化 前端开发 测试技术
接口测试新选择:Postman替代方案全解析
在软件开发中,接口测试工具至关重要。Postman长期占据主导地位,但随着国产工具的崛起,越来越多开发者转向更适合中国市场的替代方案——Apifox。它不仅支持中英文切换、完全免费不限人数,还具备强大的可视化操作、自动生成文档和API调试功能,极大简化了开发流程。
|
监控 大数据 Java
使用Apache Flink进行大数据实时流处理
Apache Flink是开源流处理框架,擅长低延迟、高吞吐量实时数据流处理。本文深入解析Flink的核心概念、架构(包括客户端、作业管理器、任务管理器和数据源/接收器)和事件时间、窗口、状态管理等特性。通过实战代码展示Flink在词频统计中的应用,讨论其实战挑战与优化。Flink作为大数据处理的关键组件,将持续影响实时处理领域。
2901 5
|
存储 安全 物联网
什么是安全密钥,它是如何工作的
安全密钥是一种物理设备,常用于双因素或多因素身份验证(2FA/MFA),以提升在线账户安全性。它通过公钥加密协议(如FIDO U2F/FIDO2)实现强大的防网络钓鱼和凭证盗窃功能。常见的类型包括USB-A、USB-C、NFC和蓝牙密钥,支持一键登录且兼容多种服务。即使凭据泄露,安全密钥也能有效保护账户。若丢失密钥,可通过备用验证码或替代验证方法恢复访问,并重新注册新密钥。工具如ADSelfService Plus可与安全密钥无缝集成,提供自适应MFA及密码管理功能,增强整体安全性。
1723 0
什么是安全密钥,它是如何工作的
|
供应链 安全 算法
Github 宣布在2023年底前必须使用双重验证
2FA(双因素身份验证)是一种增强在线账户安全性的方法,要求用户提供两种不同类型的验证信息才能登录。常见的验证因素包括密码、手机验证码、指纹等。启用2FA能显著提升账户安全性,防止因密码泄露导致的账户被盗。对于开发者而言,尤其是在使用如GitHub这样的平台时,启用2FA尤为重要,可有效抵御恶意攻击,保护代码和个人信息的安全。设置2FA通常通过安装TOTP应用(如Microsoft Authenticator)并按照平台指引完成相关配置。即使手机App被卸载,用户也可通过保存的恢复码登录账户。
1495 3
Github 宣布在2023年底前必须使用双重验证
|
人工智能 算法 安全
OpenRouter 推出百万 token 上下文 AI 模型!Quasar Alpha:提供完全免费的 API 服务,同时支持联网搜索和多模态交互
Quasar Alpha 是 OpenRouter 推出的预发布 AI 模型,具备百万级 token 上下文处理能力,在代码生成、指令遵循和低延迟响应方面表现卓越,同时支持联网搜索和多模态交互。
1243 1
OpenRouter 推出百万 token 上下文 AI 模型!Quasar Alpha:提供完全免费的 API 服务,同时支持联网搜索和多模态交互
|
开发工具 git 索引
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
git上面中新建gitignore文件,并且去除已经在仓库版本管理中的文件夹
916 4
|
JavaScript 前端开发
js中的bind,call,apply方法的区别以及用法
JavaScript中,`bind`、`call`和`apply`均可改变函数的`this`指向并传递参数。其中,`bind`返回一个新函数,不立即执行;`call`和`apply`则立即执行,且`apply`的参数以数组形式传递。三者在改变`this`指向及传参上功能相似,但在执行时机和参数传递方式上有所区别。
762 1
|
人工智能 自然语言处理 机器人
对话阿里云CIO蒋林泉:AI时代,企业如何做好智能化系统建设?
对话阿里云CIO蒋林泉:AI时代,企业如何做好智能化系统建设?