ThreadLcal作用

ThreadLcal就是一个线程中能够存储数据的Map结构,在同一个线程中,这个Map结构中的数据会被共享.

API:

threadLocal的三个方法:

set (参数);    这个参数就是想要存储的数据

get():            获取存储的数据  

remove()     删除存储的数据(释放资源)

底层结构基于数组+红黑树 (与MAP集合的区别:底层没有链表)

上图介绍的是最经典的ThreadLocal用法,浏览器发送请求,在拦截器里我们可以将请求头携带的信息放在ThreadLocal的Map结构中,在此线程后续的操作中在线程走过的任意位置都可以获取到这个Map结构中的值.

应用场景:我们可以从前端发出的请求头里获取到token值,解析token将从token获取的值存储到这个Map结中,比如操作人的id,用户名等信息.添加到数据中记录下来.

缺点:只支持单线程,ThreadLocal属于线程,所以在多线程的情况下不适用.并且这个存储的key值是属于弱引用对象,JDK的底层有个垃圾回收器.在弱引用不被使用时,会被垃圾回收器回收掉.但是value 值不会被回收,这个时候就会有一个内存泄漏的问题.

解决内存泄漏的办法,在使用完毕后,调用remove方法回收掉.一般在前端视图渲染完毕之后进行销毁.

其实弱引用在被使用时就不再是弱引用,会变成强引用.因为在使用,垃圾回收器不会回收.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值