ThreadLocal相关问题

来源:7-5 使用线程本地变量存储会员信息

weixin_慕粉4436965

2024-04-29

老师请教下,7-5中"/save"请求
1,针对另一个问题的回答
”不会,一般会有个线程池,比如固定200个线程在处理请求,同一个线程,后进来的请求会把前一个请求的member覆盖掉,也就是说最多有200个member”
当后来的请求把前一个请求的member覆盖掉后,前一个用户是不是就算退出登录状态了,需要重新登录?那系统能同时在线的用户不是只有200个了吗?
2,请问在实际场景中,比如高并发情况下,这样使用threadLocal会遇到内存泄漏的情况吗
3,看到7.8课程中,“/query-list”请求也调用了“LoginMemberContext.getId()”,请问是指登录的用户不主动退出,且线程池中线程充足,就不会释放线程资源,并持续保存threadLocal中的值吗?这样只要用户保证登录状态,不同的请求都可以只用threadLocal中保存的id值。然后当线程池满了之后,后来的请求把前一个member覆盖了,前面的用户只能重新登录。如果一段时间内涌入的客户较大,前一个用户的token还没过期,就被后面一个用户顶替掉了,threadLocal中的值失效,会不会出问题呢

写回答

3回答

甲蛙

2024-04-30

  1. 这里存的会员不是用于校验是否登录的,只是为了在处理一次请求期间,方便各代码段获取会员信息。至于登录信息是放在JWT里解密出来的。 

  2. 在实际项目中我们也用过ThreadLocal,每日超百万的有效订单,没有遇到问题

  3. 参考问题1,ThreadLocal只是方便取会员信息,不是用于校验。只是在校验完后,顺便往ThreadLocal里放入会员信息

1
1
weixin_慕粉4436965
明白了,感谢老师!
2024-04-30
共1条回复

weixin_慕粉4436965

提问者

2024-04-30

问题3已经明白了,“/query-list”请求在到controller前,要先经过拦截器,然后被拦截器提取出新的token和memberId存储到新线程的threadLocal中了,和"/save"请求不是一个线程了

0
0

额5226507

2024-04-29

通常不是一个请求对应一个线程吗,处理完一个请求就还回去,线程之间是独立的(我觉得的,不一定对哈)

0
1
weixin_慕粉4436965
问题更新了哈
2024-04-30
共1条回复

新版Springboot3.0打造能落地的高并发仿12306售票系统

最新版Spring3.0仿12306售票系统实战

852 学习 · 511 问题

查看课程