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() 清空资源,避免内存泄漏
相关文章
|
5月前
|
人工智能 自然语言处理 安全
AI技术对英语学习的改进
AI正重塑英语学习:从工具升级为“全天候数字教育基建”。2026年,智能语伴具备长期记忆与主动交互;多模态技术实现口型/肢体精准纠偏;“i+1”动态分级适配兴趣与水平;写作指导聚焦逻辑与思维润色;教师获AI赋能,实现精准教学与高效备课。(239字)
|
10月前
|
安全 Java C++
synchronized 原理
本文详解 Java 中 `synchronized` 的底层实现原理及锁升级机制。通过 Monitor 对象管理线程竞争,涉及 owner、EntryList、WaitSet 等结构,并介绍偏向锁、轻量级锁、重量级锁的升级过程。同时对比 `synchronized` 与 `volatile`、`Lock` 的区别,涵盖原子性、可见性、有序性及功能扩展性,帮助理解并发编程中的线程安全机制。
292 0
|
10月前
|
缓存 前端开发
HOC 或 Render Props 有没有性能方面的考虑?
HOC 或 Render Props 有没有性能方面的考虑?
291 100
|
人工智能 算法 NoSQL
LRU算法的Java实现
LRU(Least Recently Used)算法用于淘汰最近最少使用的数据,常应用于内存管理策略中。在Redis中,通过`maxmemory-policy`配置实现不同淘汰策略,如`allkeys-lru`和`volatile-lru`等,采用采样方式近似LRU以优化性能。Java中可通过`LinkedHashMap`轻松实现LRUCache,利用其`accessOrder`特性和`removeEldestEntry`方法完成缓存淘汰逻辑,代码简洁高效。
578 0
|
9月前
|
机器学习/深度学习 算法 安全
【优化充电】基于多种改进遗传算法(变异遗传算法、精英遗传算法、原始遗传算法)求解电动汽车有序充电优化问题比较研究(Matlab代码实现)
【优化充电】基于多种改进遗传算法(变异遗传算法、精英遗传算法、原始遗传算法)求解电动汽车有序充电优化问题比较研究(Matlab代码实现)
213 2
|
10月前
|
机器学习/深度学习 存储 安全
计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】(Matlab代码实现)
计及N-k安全约束的含光热电站电力系统优化调度模型【IEEE14节点、118节点】(Matlab代码实现)
232 0
|
10月前
|
人工智能 JavaScript 前端开发
JavaScript 中 `apply`、`call` 和 `bind` 的具体理解与区别
`apply`、`call` 和 `bind` 是 JavaScript 中用于改变函数 `this` 指向的方法。`apply` 以数组形式传递参数并立即执行函数;`call` 则以逗号分隔的参数列表传递并立即执行;而 `bind` 不会立即执行,而是返回一个绑定好 `this` 和部分参数的新函数,适用于延迟调用。三者在参数传递方式和执行时机上有所不同,适用于不同的开发场景,如动态绑定上下文、参数不定的函数调用、事件处理等。掌握它们的使用可以提升代码灵活性与复用性。
518 0
|
存储 算法 安全
深入详解ThreadLocal
在我们日常的并发编程中,有一种神奇的机制在静悄悄地为我们解决着各种看似棘手的问题,它就是 ThreadLocal 。
22050 9
深入详解ThreadLocal
|
存储 安全 物联网
什么是安全密钥,它是如何工作的
安全密钥是一种物理设备,常用于双因素或多因素身份验证(2FA/MFA),以提升在线账户安全性。它通过公钥加密协议(如FIDO U2F/FIDO2)实现强大的防网络钓鱼和凭证盗窃功能。常见的类型包括USB-A、USB-C、NFC和蓝牙密钥,支持一键登录且兼容多种服务。即使凭据泄露,安全密钥也能有效保护账户。若丢失密钥,可通过备用验证码或替代验证方法恢复访问,并重新注册新密钥。工具如ADSelfService Plus可与安全密钥无缝集成,提供自适应MFA及密码管理功能,增强整体安全性。
1317 0
什么是安全密钥,它是如何工作的