ThreadLocal

ThreadLocal,线程局部变量,每个线程单独一份。

  1. 实现原理: 线程实例Thread中保存了一份map对象,该map对象以ThreadLocal为key, ThreadLocal保存的值为value。保证了每个线程都单独一份。 这个map是属于ThreadLocal 中定义的static class。
    该map:散列表,与HashMap的实现不同,不是使用的链接法来处理碰撞。同时请注意,map中的entry是extends WeakRefeance,这样实现的目的,是为了进一步防止内存泄漏,但是这种防止,只能对ThreadLova变量的释放起到作用,对value不生效。
    protected void initialValue(T value); 提供初始值
    get();
    set();

  2. 内存泄漏:
    ThreadLocal 会有内存泄漏的风险存在。
    for example:(1)对于ThreadLocal,外部调用完后,实例超出作用域,再加上 设置的weakReference,可回收,但是对于entry中的value来说,entry一直指向它,属于强引用。
    所以才有了ThreadLocal中的set、get方法的不同处理。
    每次在循环查找时,都在判断了e.key == key 不成立之后,if (e.key==null),用于回收掉e.key==null的entry。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值