黑马点评threadlocal

今天面试,面试官对于threadlocal的使用提问。然后鼠🐭发现不太了解这部分的使用,就说了一个方便以后的使用,面试官不太满意。
1 每次请求都会携带token,直接用redis查询不就可以了吗,为什么还要存到threadlocal
2 用户请求也不一定是一个线程,一个线程过来没有用到另一个线程的信息怎么办#牛客AI配图神器#
全部评论
其实根本原因是TL存储的不是token,而是用户每次请求携带的token解析出来的用户信息,通常是在拦截器中进行解析存储到TL,这样就不存在第二个问题了
55 回复 分享
发布于 2025-03-18 23:49 浙江
jwt最大的优点就是无状态,去中心化存储。存到Redia里就不需要jwt了
11 回复 分享
发布于 2025-03-19 09:32 北京
第一个你是把token放ThreadLocal里了吗。token不会存在ThreadLocal里,因为鉴权token一般每次发送请求的客户端是一样的,但你每一次请求都会分配和上一次请求不一样的线程,你把token存在threadlocal里面就没法验证token了。在一个线程的执行过程里为了不让后面每次拿数据都得访问一次数据库才会鉴权之后把用户信息存在Threadlocal里。 第二个问题没太懂,如果是说Threadlocal数据无法子父线程间共享可以用InheritableThreadLocal或者Transimittablethreadlocal
6 回复 分享
发布于 2025-03-18 18:58 广东
你思考一下openfeign请求为什么丢失就懂了
3 回复 分享
发布于 2025-03-24 20:20 湖南
以xx外卖为例谈谈我的浅薄认知:1.是不是一定要有threadlocal:可以没有的 只需要在每个接口的函数后面读一下header的cookie带的jwt 然后解析即可 2.用threadlocal的好处:a.更好的实现流程前后解耦和 让每部分专注于自己的内容 业务就业务 鉴权就鉴权 b.方便流程中前一级的信息向后一级传递 thradlocal里面可以携带任意信息 c.类似全局exception处理 规范 省事
2 回复 分享
发布于 2025-04-26 20:37 福建
第一个问题,如果每次请求都会携带token,然后通过redis查询,就会出现每个请求映射到控制器之后,控制器的方法都需要实现响应的解析请求头获取JWT,然后再去redis查询,通过拦截器可以轻松实现,不需要大量的代码冗余,而且后期如果需要改变响应的JWT解析规则,或者使用另外的验证规则,就不得不修改具体业务代码。而且高并发场景下,redis的性能一旦被严重影响,将会影响用户请求,尽管改请求不需要与redis交互。
1 回复 分享
发布于 2025-05-29 18:44 福建
m
1 回复 分享
发布于 2025-03-22 18:08 福建
耐面王
点赞 回复 分享
发布于 2025-06-04 11:12 河南
m
点赞 回复 分享
发布于 2025-05-15 18:06 湖北
m
点赞 回复 分享
发布于 2025-04-26 11:37 湖南
threadlocal不是一般存用户解析的信息的吗,前端发送token,后端解析token存到threadlocal,供其他功能使用
点赞 回复 分享
发布于 2025-04-21 23:39 河南
m
点赞 回复 分享
发布于 2025-04-13 21:42 四川
m
点赞 回复 分享
发布于 2025-04-13 11:51 北京
因为token解析同样需要时间,而且redis和jvm通信也需要时间啊,threadlocal是本地的速度更快。
点赞 回复 分享
发布于 2025-04-12 13:37 上海
m
点赞 回复 分享
发布于 2025-04-09 01:24 广东
m
点赞 回复 分享
发布于 2025-04-08 11:07 湖南
mark
点赞 回复 分享
发布于 2025-04-06 17:54 陕西
m
点赞 回复 分享
发布于 2025-04-05 14:58 天津
m
点赞 回复 分享
发布于 2025-04-04 01:30 江苏
m
点赞 回复 分享
发布于 2025-04-01 08:14 湖南

相关推荐

04-22 10:34
已编辑
门头沟学院 Java
base上海 岗位是工具链云平台全栈开发实习生大概面了一个小时左右 前后端以及ai都有涉及后端:用户点击下单后,库存是什么时候扣的?下单和支付分别处于什么阶段?是不是在用户还没支付时就先扣掉库存了?如果有人恶意下单、不付款、不取消,会不会长期占用库存?你怎么处理库存释放问题?你们为什么用 Kafka,为什么不用 RabbitMQ 或其他更轻量的 MQ,你理解里 Kafka 和 RabbitMQ 的最大区别是什么?什么是缓存击穿、穿透?布隆过滤器的作用是什么、底层结构是什么、大小一般怎么设置,布隆过滤器大小和商品量 、用户量、 订单量有什么关系?在 Spring Boot 启动完成后,如果想自动做缓存预热,怎么实现,怎么监听容器启动完成这个事件?Java 线程池一般用哪个类、在 Spring Boot 里怎么配置线程池?配完线程池后,线程会不会立刻创建?没有任务后线程是否一直保留?常用 Linux 命令、git命令前端:你的前端是自学的,还是在项目里真实做过?为什么学 Vue,没学 React?你对 Vue / Vue3 了解深不深?Vue3 生命周期有哪些?除了 Element UI 还用过哪些组件库?你知不知道栅格系统?什么是响应式单页面?ai闲聊 20分钟职业规划闲聊10分钟
查看18道真题和解析
点赞 评论 收藏
分享
评论
56
315
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务