Th

ThreadLocal.Map的key为何要做成weakReference:

 

1. 当外部tl=null后,只剩key->ThreadLocal对象,故ThreadLocal对象可被回收。因为tl=null,就可以保证不会有“tl.get()”出现,就不会有“Thread.Map.get(this)”出现,故ThreadLocal对象一定是不被外部可见的了,所以可以让它被回收。

   如果是普通Map,

   Key key = new Key();

   map.set(key,value);

   key=null; //new Key()这个对象是不会被回收的。因为Map中有refer指向该对象。

 

2.     /** The entries in this hash map extend WeakReference, using
         * its main ref field as the key (which is always a
         * ThreadLocal object).  Note that null keys (i.e. entry.get()
         * == null) mean that the key is no longer referenced, so the
         * entry can be expunged from table.

     ThreadLocal对象被回收后,key->null,此时这个entry可从table中被擦除。?

 

 

 

 

 

 

另外,这是使用WeakReference的例子:

  WeakReference<String> wr = new WeakReference<String>(new String("abc"));
  System.out.println(wr.get());

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值