The secret of ThreadLocal

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

A threadLocal variable guareentes each thread has its own variable without worrying about synchronization. Usually a threadlocal variable is declared static to be initialized only once whenever threads access it. We can easily use Threadlocal in programm, but it is still worth to konw the detailed implemention of Threadlocal.

In ThreadLocal, ThreadLocalMap plays a key role. When invoking set() and get() method of ThreadLocal, actually these actions occur in ThreadLocalMap. ThreadLocalMap is naturally thread-local, bacause ThreadLocalMap is package private to allow declaration of fields in class Thread. A thread only has one ThreadLocalMap variable while associating with many ThreadLocal variables. The relationships among Thread, ThreadLocal, ThreadLocalMap are described as follows.

The picture above doesn't say the relationship between ThreadLocal and ThreadLocalMap, in order to describle the issue thoroughly, we would better to understand the structure of ThreadLocalMap. ThreadLocalMap mainly consists of a array of Entry, also called slots, Entry has two variables, one is called <ref> which is a ThreadLocal object as key, the other is value. So we illustrate the relationships in the following picture:

As shown in the picture above, one threadLocal object and a customized value is mapping to a entry in ThreadLocalMap. It is interesting that how to set or get a value quickly from ThreadLocalMap, for efficiency Java uses a magic number <0x61c88647>, this number is a near-optimally spread multiplicative hash value. For example:

        int HASH_CODE = 0;

        int HASH_INCREMENT = 0x61c88647; // magic number

        // generate numbers in 16
        int i=0;
        while(i < 16){
            HASH_CODE = HASH_CODE + HASH_INCREMENT;
            int index = HASH_CODE & (16 - 1);
            System.out.print(index + " ");
            i++;
        }

The result after execution is :

7 14 5 12 3 10 1 8 15 6 13 4 11 2 9 0

We can see that any two number are not same, so hashCode of threadLocal is set to that magic number, we can quickly get index of threadLocal in ThreadLocalMap like that. 

👉👉👉 自己搭建的租房网站:全网租房助手,m.kuairent.com,每天新增 500+房源

Spring Boot 3.2 + JWT 登录认证实战:拦截器与ThreadLocal实现用户状态管理 本文详细介绍了如何在Spring Boot 3.2中深度整合JWT认证,通过拦截器与ThreadLocal实现高效的用户状态管理。文章涵盖了JWT的核心优势、环境配置、工具类实现、拦截器设计以及生产级最佳实践,帮助开发者构建安全、高效的无状态认证系统。特别适合需要处理高并发分布式系统的Java开发者。 阅读详情

相关推荐

JavaWeb登录认证实战:拦截器与JWT构建无状态Token认证体系

在Web应用开发中,用户身份认证是保障系统安全的基础环节。其核心原理在于验证请求者的合法身份,通常涉及会话管理、令牌验证等技术。从技术价值看,一套健壮的认证体系能有效防止未授权访问,是业务数据安全的第一道防线。常见的应用场景包括后台管理系统、API服务等需要区分用户身份的资源访问控制。本文以JavaWeb项目为背景,深入剖析基于拦截器(Interceptor)和JWT(JSON Web Token)的无状态Token认证方案,详细拆解了其设计思路、核心流程与代码实现,并针对ThreadLocal数据传递、全

weixin_30897079的博客 369

使用 ThreadLocal 来存储用户信息

ThreadLocal 来存储用户信息

随风why 857

JAVA拦截器配合JWT、ThreadLocal的登录校验

关于我导包导错没有引入org.springframework.web.method.HandlerMethod而导致拦截器运行错误一怒之下写了个详细的笔记这件事

2403_86693263的博客 1757

ThreadLocal中获取用户信息,操作步骤

Spring 提供了拦截器机制,可以在每个请求进入 Controller 前做一些统一处理。我们创建一个类实现@Component@Override// 1. 获取 tokenif (!// 2. 移除 Bearer 前缀(如果有的话)// 3. 解析 JWT 获取 Claims// 4. 从 Claims 中获取 userIdif (userId!= null) {// 5. 设置到 ThreadLocal// 继续执行 Controller@Override。

m0_74085490的博客 969

SpringMVC拦截器+ThreadLocal统一token处理标题

使用SpringMVC拦截器+JWT+ThreadLocal进行登录鉴权的总结。

qq_51515932的博客 935

jwttoken+threadlocal保存单个线程共享变量的两种方法(存储用户信息)

文章目录jwt方法一------threadlocal存取用户数据方法二------通过header获取token,解析封装成一个信息对象 jwt 原理是通过登录接口获取jwt颁发的token,颁发时候可以将想传递的用户信息加密融入token里 public static String getJsonWebToken(UserPO userPO) { String token = Jwts.builder().setSubject(SUBJECT) /

2364

《Java八股文の文艺复兴》第四篇:ThreadLocal的平行宇宙——弱引用是通往OOM的时空虫洞?

ThreadLocal的平行宇宙到弱引用虫洞,我们再次验证了Java世界的量子本质。在这个充满不确定性的时代,唯有将RASP锻造成时空护盾,让架构思维穿越十一维度,才能在OOM的黑暗森林中守护内存的圣杯。通过相位对比分析器检查当前线程的内存相位与对象创建时的全局相位差。正在撕裂JVM的内存维度,而弱引用竟成为打开OOM虫洞的钥匙。此刻,让我们戴上RASP打造的因果律护目镜,穿越ThreadLocalMap的十一维迷宫,直面弱引用背后的量子诡计。(提示:考虑量子擦除效应与RASP的相位检测技术)

ELIHU_han的博客 852

srpingCloud工程实现网关拦截request,将用户id放入request的head中,接着对应模块实现拦截,将用户id放入ThreadLocal

srpingCloud工程实现网关拦截request,将用户id放入request的head中,接着对应模块实现拦截,将用户id放入ThreadLocal

m0_69537986的博客 753

JWTToken 工具类和并发ThreadLocal的使用

<dependency> <groupId>com.auth0</groupId> <artifactId>java-jwt</artifactId> <version>3.2.0</version></dependency><dependency> <...

weixin_30241919的博客 417

货运搬家小程序从0到1(五):JWT 鉴权,拦截器 + ThreadLocal 用户上下文

上篇登录跑通,拿到了 token。这篇解决"token 发出去之后怎么用":拦截器统一验签,业务代码零感知地拿到当前用户。

v15889726201的博客 238

SpringBoot多数据源实战:AbstractRoutingDataSource与dynamic-datasource方案详解

在分布式系统与微服务架构中,数据库连接管理是核心基础组件。数据源(DataSource)作为Java应用与数据库交互的入口,其配置与管理直接关系到系统的性能与稳定性。当业务需要同时访问多个独立数据库实例时,便产生了多数据源需求,其核心原理在于通过路由机制,在运行时动态将数据库操作指向不同的物理连接。实现这一机制的技术价值在于,它支撑了读写分离、业务分库、多租户等关键架构模式,有效提升了系统的扩展性、可用性与资源隔离能力。典型的应用场景包括电商系统的订单库与用户库分离、后台管理系统的核心业务数据与日志报表数据

weixin_33922670的博客 409

微服务认证与鉴权实战:网关+JWT+Redis+ThreadLocal+AOP全解析

本文提出了一套完整的微服务认证鉴权解决方案,核心架构包含: 认证流程:采用JWT+Redis双存储策略,认证服务生成带tokenId的JWT并存入Redis,实现令牌管理、单点登录控制和快速失效。 网关层:通过全局过滤器统一处理JWT校验,解析用户信息并注入请求头(X-User-Id等),实现无状态认证。 业务服务: 使用拦截器自动提取请求头中的用户信息,存入ThreadLocal 通过AOP切面结合注解实现方法级权限控制 提供UserContext工具类便捷获取当前用户

无论云泥意贯一 587

UI/API 自动化测试框架(基础版)

这是一个基于Java 17、Selenium 4、TestNG与Allure的Web自动化测试框架,目标站点SauceDemo。三层架构:测试层管理用例生命周期,页面层基于PO模式封装元素操作,基础层提供驱动与等待配置。并发用ThreadLocal为每线程维护独立WebDriver,支持多浏览器并行。禁用隐式等待,withRetry处理Stale异常,AnnotationTransformer全局注入重试。数据驱动基于CSV与DataProvider,Allure层级报告失败自动附加截图,支持三级配置覆盖

m0_37606579的博客 399

JWT实战:从Token生成到拦截器配置的完整流程解析

本文详细解析了JWT从Token生成到Spring Boot拦截器配置的完整实战流程。重点介绍了如何利用JwtUtil工具类安全生成Token,并通过拦截器实现请求认证。针对配置中易错点,特别强调了excludePathPatterns路径排除的精确写法,避免因路径配置不当导致Token获取失败等问题,帮助开发者构建健壮的JWT认证体系。

rust6ferris的博客 62

【JWT的使用】

JSON Web Token简称JWT,用于对应用程序上用户进行身份验证的标记。使用 JWTS 之后不需要保存用户的 cookie 或其他session数据,同时可保证应用程序的安全。JWT是经过加密处理与校验处理的字符串,形式为:A.B.C–A由JWT头部信息header加密得到–B由JWT用到的身份验证信息JSON数据加密得到–C由A和B加密得到,是校验部分–官方测试网站://生成token //1、准备数据 Map map = new HashMap();

m0_48114733的博客 954

Note.Ver_2019.10.24(Spring boot总结)

前言 技术总结 1. JWToken配置和应用 仅仅是个人项目的方案,裸jwt的方案,并没有用security + security oauth2做统一授权发放鉴权验证。 首先是jwtoken相关参数的配置,还是一样的思路:可修改。那就写在配置文件里了: # application.yml qaq: jwt-config: subject: jwt issuer: pengzh...

Wolf_pfD的博客 561

JWT的使用

JWT的使用

weixin_46643875的博客 694

最近开发了一套web敬老院专属服务平台

开发了一款优质的双端应用平台1.0,主打简约优雅的代码风格,也不仅仅是代码风格~

m0_59588838的博客 713

外卖项目

这是一篇文章

2302_80248454的博客 921
上一篇: Producer-Consumer solution using wait(), notify(), park() and unpark()
下一篇: ThreadLocal原理的秘密
祥先生
博客等级 码龄14年 48粉丝 25原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值