ThreadLocal 原理?需要注意什么?

server/2025/2/12 9:51:39/

目录

ThreadLocal 的原理

核心原理

示例代码

使用 ThreadLocal 需要注意的问题

1. 内存泄漏

2. 线程池中的问题

3. 初始值

4. 性能开销

5. 父子线程数据传递

最佳实践

总结


ThreadLocal 的原理

ThreadLocal 是 Java 中用于实现线程本地存储的类,它为每个线程提供独立的变量副本,避免了多线程环境下的竞争问题。

核心原理
  1. 线程隔离

    • 每个线程内部都有一个 ThreadLocalMap,用于存储线程本地变量。

    • ThreadLocal 作为键,变量副本作为值,存储在当前线程的 ThreadLocalMap 中。

  2. 数据结构

    • ThreadLocalMap 是 ThreadLocal 的内部类,类似于 HashMap,但键是 ThreadLocal 对象,值是线程本地变量。

    • ThreadLocalMap 使用弱引用(WeakReference)存储键,避免内存泄漏。

  3. 操作机制

    • set(T value):将值存储到当前线程的 ThreadLocalMap 中。

    • get():从当前线程的 ThreadLocalMap 中获取值。

    • remove():从当前线程的 ThreadLocalMap 中移除值。

示例代码
public class ThreadLocalExample {private static final ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);public static void main(String[] args) {Runnable task = () -> {int value = threadLocal.get();threadLocal.set(value + 1);System.out.println(Thread.currentThread().getName() + ": " + threadLocal.get());};Thread t1 = new Thread(task, "Thre

http://www.ppmy.cn/server/167022.html

相关文章

Web3 的虚实融合之路:从虚拟交互到元宇宙构建

在这个数字技术日新月异的时代&#xff0c;我们正站在 Web3 的门槛上&#xff0c;见证着互联网的又一次革命。Web3 不仅仅是技术的迭代&#xff0c;它代表了一种全新的交互方式和价值创造模式。本文将探讨 Web3 如何推动虚拟交互的发展&#xff0c;并最终实现元宇宙的构建&…

【11天从零基础入门flask】第 7 章 表单

第 7 章 表单 Cross-Site Request Forgery&#xff08;CSRF&#xff09;是指恶意网站通过伪造用户请求来执行不当操作&#xff0c;像是删除数据或执行其他修改操作。在我们的删除条目操作中&#xff0c;虽然使用了 POST 请求来避免使用 GET 请求执行敏感操作&#xff0c;但这个…

CEF132 编译指南 MacOS 篇 - depot_tools 安装与配置 (四)

1. 引言 在 CEF132&#xff08;Chromium Embedded Framework&#xff09;的编译过程中&#xff0c;depot_tools 扮演着举足轻重的角色。这套由 Chromium 项目精心打造的脚本和工具集&#xff0c;专门用于获取、管理和更新 Chromium 及其相关项目&#xff08;包括 CEF&#xff…

[前端] axios网络请求二次封装

一、场景描述 为什么要对axios网络请求进行二次封装? 解决代码的复用&#xff0c;提高可维护性。 —这个有两个方案&#xff1a;一个是二次封装一个是实例化。&#xff08;设置一些公共的参数&#xff0c;然后进行请求&#xff09; 为什么可以解决代码的复用&#xff1a; 这是…

日志2025.2.11

日志2025.2.11 1.增加了敌人滚动这个特殊技能 //具有翻滚技能的敌人实现翻滚 public void ActivateDodgeRoll() { if(meleeType ! EnemyType_Melee.Dodge) { return; } if(stateMachine.currentState ! chaseState) { …

【论文笔记】Are Self-Attentions Effective for Time Series Forecasting? (NeurIPS 2024)

官方代码https://github.com/dongbeank/CATS Abstract 时间序列预测在多领域极为关键&#xff0c;Transformer 虽推进了该领域发展&#xff0c;但有效性尚存争议&#xff0c;有研究表明简单线性模型有时表现更优。本文聚焦于自注意力机制在时间序列预测中的作用&#xff0c;提…

【Bug】属性 PackageVersion 应在所有目标框架中具有单个值,但却具有以下值

文章目录 问题问题代码原因解决处理Bug的具体步骤 问题 严重性 代码 说明 项目 文件 行 禁止显示状态 错误(活动) NU1105 无法读取“x”的项目信息: 属性 PackageVersion 应在所有目标框架中具有单个值&#xff0c;但却具有以下值: 1.0.0, 1.0.5 x (net8.0-android), x (net8.…

关于“前端已死”的命题

翻阅知乎论坛&#xff0c;看了各位大佬的解析&#xff0c;从技术发展、市场环境、岗位需求三个维度综合理解这个命题&#xff1a; 1. 技术层面 前端技术生态并未停滞&#xff0c;反而持续迭代升级。HTML/CSS/JavaScript 核心基础未变&#xff0c;但框架&#xff08;如 Vue、R…