当前位置: 首页 > news >正文

揭秘ThreadLocal核心原理与应用

ThreadLocal 原理

ThreadLocal 是 Java 中用于实现线程局部变量的类,每个线程都可以独立地访问自己的变量副本,避免了多线程环境下的共享变量竞争问题。ThreadLocal 的核心原理是通过线程内部的 ThreadLocalMap 存储变量副本,每个线程拥有独立的存储空间。

ThreadLocal 的实现依赖于 Thread 类中的 ThreadLocalMap 成员变量,该变量是一个自定义的哈希表,键为 ThreadLocal 实例,值为存储的变量副本。当调用 ThreadLocal 的 get()set() 方法时,会从当前线程的 ThreadLocalMap 中操作数据。

ThreadLocal 在多线程中的应用实例

以下是 ThreadLocal 在 Java 多线程中的常见应用场景和示例:

示例 1:线程安全的日期格式化
public class DateFormatExample {private static final ThreadLocal<SimpleDateFormat> dateFormat =ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));public static String formatDate(Date date) {return dateFormat.get().format(date);}
}

 ThreadLocal可为每个线程提供独立的实例。

private static final ThreadLocal<SimpleDateFormat> dateFormat = ThreadLocal.withInitial(() -> new SimpleDateFormat("yyyy-MM-dd"));
示例 2:数据库连接管理
public class ConnectionManager {private static final ThreadLocal<Connection> connectionHolder =new ThreadLocal<>();public static Connection getConnection() throws SQLException {Connection conn = connectionHolder.get();if (conn == null) {conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/test");connectionHolder.set(conn);}return conn;}public static void closeConnection() throws SQLException {Connection conn = connectionHolder.get();if (conn != null) {conn.close();connectionHolder.remove();}}
}

 在连接池中为每个线程分配独立的数据库连接,避免多线程竞争。

http://www.lryc.cn/news/596779.html

相关文章:

  • Linux文件系统理解1
  • NLP自然语言处理的一些疑点整理
  • vue2的scoped 原理
  • 基于SpringBoot+MyBatis+MySQL+VUE实现的实习管理系统(附源码+数据库+毕业论文+项目部署视频教程+项目所需软件工具)
  • Python通关秘籍(五)数据结构——元组
  • linux 驱动 - v4l2 驱动框架
  • Linux 重定向和缓冲区
  • docker-desktop启动失败
  • leetcode 1695. 删除子数组的最大得分 中等
  • importlib.import_module() 的用法与实战案例
  • MySQL 学习一 存储结构和log
  • HTML结构解析
  • SpringAOP的实现原理和场景
  • SQLAlchemy 2.0简单使用
  • c++day05(ASCII)
  • 性能测试-从0到1搭建性能测试环境Jmeter+Grafana+influxDB+Prometheus+Linux
  • “鱼书”深度学习入门 笔记(1)前四章内容
  • torchvision.transforms 与 MONAI 数据增强的异同
  • C# 类 封装 属性 练习题
  • RabbitMQ-交换机(Exchange)
  • Ajax第一天
  • 美团视觉算法面试30问全景精解
  • freertos关键函数理解 uxListRemove
  • JavaScript 01 JavaScript 是什么
  • 在 Linux 上安装 `pgvector`(这是一个 PostgreSQL 的向量类型扩展,常用于处理嵌入向量,便于进行向量相似度搜索)
  • JavaScript 03 严格检查模式Strict字符串类型详解
  • 从零开始学习大模型之文本数据处理
  • Kotlin伴生对象
  • Python的界面美化库 QDarkStyleSheet
  • 循环神经网络--NLP基础