关于ThreadLocal和InheritableThreadLocal解析

 更新时间:2025年03月31日 09:23:28   作者:Old Wang  
这篇文章主要介绍了关于ThreadLocal和InheritableThreadLocal解析,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教

一、两者区别

  • ThreadLocal:为每一个线程创建一个副本,每个副本线程隔离。但是他不支持继承。
  • InheritableThreadLocal:支持继承。这里的继承不是extends,是指线程的继承。也就是说新起一个线程可以拥有老线程的数据。

二、原理

这里要先说另一个概念ThreadLocalMap。他和普通map差不多,也是key-value结构,key为threadlocal对象,value为你设置的值。

为什么这里要用map,因为可能有多个ThreadLocal对象。所以这个map可以理解为仓库,存储数据的仓库。

在Thread类我们可以看到如下分别创建2个 ThreadLocalMap对象。用来存储数据。

继续追踪,查找它是什么时候被赋值的(分为ThreadLocal实现和InheritableThreadLocal实现)。

  • ThreadLocal:在ThreadLocal类的set方法,它调用当前线程获取ThreadLocalMap,如果没有就new一个

  • InheritableThreadLocal:重写了getMap和createMap两个方法。

OK,我们知道是怎么赋值的,那么InheritableThreadLocal是怎么做到继承(值传递)的呢?

在Thread的init方法里我们看到如下的赋值语句:

在初始化时候获取当前线程的inheritableThreadLocals(这是新线程的初始化,但是currentThread获取的还是老线程),把它赋值到新线程的属性里去,这样新线程就有值了。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • 将Arthas整合到Java业务镜像中的流程步骤

    将Arthas整合到Java业务镜像中的流程步骤

    在现代Java应用开发中,诊断和调试是一个不可或缺的环节,Arthas,作为阿里巴巴开源的一款Java诊断工具,提供了一种在不修改代码的情况下,实时监控、诊断和调试Java应用程序的解决方案,本文将详细介绍Arthas的基本概念,并逐步指导如何将其整合到Java业务镜像中
    2025-02-02
  • springboot+thymeleaf+shiro标签的实例

    springboot+thymeleaf+shiro标签的实例

    这篇文章主要介绍了springboot+thymeleaf+shiro标签的实例,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-01-01
  • 通过Java实现文件断点续传功能

    通过Java实现文件断点续传功能

    用户上传大文件,网络差点的需要历时数小时,万一线路中断,不具备断点续传的服务器就只能从头重传,而断点续传就是,允许用户从上传断线的地方继续传送,这样大大减少了用户的烦恼。本文将用Java语言实现断点续传,需要的可以参考一下
    2022-05-05
  • Spring Boot 钩子全集实战EnvironmentPostProcessor全解

    Spring Boot 钩子全集实战EnvironmentPostProcessor全解

    文章详细介绍了SpringBoot中的EnvironmentPostProcessor扩展点,该点在配置加载阶段提供强大的定制化能力,适用于配置中心化、加密解密、动态覆盖和校验等场景,感兴趣的朋友跟随小编一起看看吧
    2026-01-01
  • Java 中比较两个 long 类型变量大小的方法(实例详解)

    Java 中比较两个 long 类型变量大小的方法(实例详解)

    比较两个long类型变量的大小时,由于是基本数据类型,直接使用Java 内置的关系运算符即可,这些运算符比较的是变量的实际值,而非内存地址,下面给大家介绍Java中比较两个long类型变量大小的方法,感兴趣的朋友一起看看吧
    2025-06-06
  • 关于批量插入或更新数据(MyBatis-plus框架)

    关于批量插入或更新数据(MyBatis-plus框架)

    这篇文章主要介绍了关于批量插入或更新数据(MyBatis-plus框架),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • java上乘武功入门--反射

    java上乘武功入门--反射

    反射是Java的一种机制,一般也叫做反射机制,本文会讲反射机制是什么和怎么使用,喜欢的朋友可以观看一下,希望能给你带来帮助
    2021-07-07
  • java实战小技巧之优雅的实现字符串拼接

    java实战小技巧之优雅的实现字符串拼接

    字符串拼接是我们在Java代码中比较经常要做的事情,就是把多个字符串拼接到一起,这篇文章主要给大家介绍了关于java实战小技巧之优雅的实现字符串拼接的相关资料,需要的朋友可以参考下
    2021-08-08
  • 简单介绍一下什么是microservice微服务

    简单介绍一下什么是microservice微服务

    这篇文章主要介绍了一下什么是microservice微服务微服务的定义,微服务到底是什么意思?什么样的架构可以叫做微服务?这篇文章可以给你答案
    2023-03-03
  • 并行Stream与Spring事务相遇会发生什么?

    并行Stream与Spring事务相遇会发生什么?

    这篇文章主要介绍了并行Stream与Spring事务相遇会发生什么?文章主要解决实战中的Bug及解决方案和技术延伸,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-05-05

最新评论