采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,ThreadLocal可以多次set吗,为什么项目中在过滤器中把用户信息放到ThreadLocal中后,又在拦截器执行完毕后remove掉呢? 如果我只写一个拦截器不写过滤器,在preHandle中,把用户从session中读取出来,如果读到就放到ThreadLocal里,读不到就跳转到登录页面,这样不行吗,或者跟老师您这样的写法相比有什么劣势吗
你好,你对threadlocal的理解不是完全透彻,我具体说一下:threadlocal从字面意思看,thread local,是线程本地私有的意思,实际的意思基本也是如此,threadlocal里set的值只有当前线程可以获取到的,其他线程都是获取不到的,通常每个接口都是新起一个线程来进行操作的。在并发课程里我有刻意介绍,使用他可以保证线程安全的,属于“线程封闭”。至于set几次就完全没影响了。由于threadlocal里存储的内容属于当前线程私有的,因此当前线程被调度执行完就再也用不到了,因此需要回收数据,不做remove操作是可能出现threadlocal里数据一直留在内存里无法释放,导致内存泄漏。
如果只写一个拦截器不写过滤器,在preHandle中,把用户从session中读取出来,如果读到就放到ThreadLocal里,读不到就跳转到登录页面,这样跟老师您这样的写法相比有什么劣势吗
如果没犯低级错误的话,现象应该是一样的
登录后可查看更多问答,登录/注册
源于企业真实Java项目,涉及大量高级技巧,覆盖权限管理开发技术
2.4k 6
2.0k 22
1.3k 20
1.1k 18