ThreadLocal

来源:8-11 ThreadLocal,LoginFilter实现登录请求的拦截

故事的小黄花丶

2019-05-10

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

写回答

1回答

Jimin

2019-05-10

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

0
2
Jimin
回复
古城老巷
如果没犯低级错误的话,现象应该是一样的
2020-04-07
共2条回复

Java开发企业级权限管理系统

源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术

2226 学习 · 1334 问题

查看课程