请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

ThreadLocal

老师,ThreadLocal可以多次set吗,为什么项目中在过滤器中把用户信息放到ThreadLocal中后,又在拦截器执行完毕后remove掉呢? 如果我只写一个拦截器不写过滤器,在preHandle中,把用户从session中读取出来,如果读到就放到ThreadLocal里,读不到就跳转到登录页面,这样不行吗,或者跟老师您这样的写法相比有什么劣势吗

正在回答 回答被采纳积分+3

1回答

Jimin 2019-05-10 22:05:02

你好,你对threadlocal的理解不是完全透彻,我具体说一下:
threadlocal从字面意思看,thread local,是线程本地私有的意思,实际的意思基本也是如此,threadlocal里set的值只有当前线程可以获取到的,其他线程都是获取不到的,通常每个接口都是新起一个线程来进行操作的。在并发课程里我有刻意介绍,使用他可以保证线程安全的,属于“线程封闭”。至于set几次就完全没影响了。由于threadlocal里存储的内容属于当前线程私有的,因此当前线程被调度执行完就再也用不到了,因此需要回收数据,不做remove操作是可能出现threadlocal里数据一直留在内存里无法释放,导致内存泄漏。

0 回复 有任何疑惑可以回复我~
  • 如果只写一个拦截器不写过滤器,在preHandle中,把用户从session中读取出来,如果读到就放到ThreadLocal里,读不到就跳转到登录页面,这样跟老师您这样的写法相比有什么劣势吗
    回复 有任何疑惑可以回复我~ 2020-04-06 22:58:07
  • Jimin 回复 古城老巷 #2
    如果没犯低级错误的话,现象应该是一样的
    回复 有任何疑惑可以回复我~ 2020-04-07 22:05:23
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信