ThreadLocal

1.实现方式

  • ThreadLocal有个内部类ThreadLocalMap(类似WeakHashMap,使用线性探测法解决hash冲突)
  • ThreadLocalMap以ThreadLocal对象为key,存储具体值
  • Thread类持有ThreadLocalMap实例引用
  • 用户代码里持有n个ThreadLocal实例
  • ThreadLocal实例自身的唯一性由hashcode计算得到(atomicinteger加上一个牛逼魔数)

===========分割线============

  • 所以,ThreadLocal是以将ThreadLocalMap绑定到Thread对象上来实现线程数据完全隔离的,也是因为如此,在Thead被销毁后,ThreadLocalMap也会一起被销毁,随线程生,随线程灭。

2.可以用ConcurrentHashMap作为全局缓存,以Thread作为key来实现ThreadLocal的效果吗?

  • 功能是可以实现的
  • put remove等操作还是有线程争抢,线程退出时得清理线程数据

总之,很麻烦,而且完全没有ThreadLocal这般来的自然,这般顺滑,根本停不下来

3.为什么一般ThreadLocal都是static声明呢?

  • 爱咋声明就咋声明,只是ThreadLocal本来就是无论是线程内部还是多线程之间都是可以直接共用的东西,static不是方便很多吗???

4.注意,现在的web框架一般都会用到线程池,那么线程是可能不会被回收的,一定记得手动remove防止内存泄漏

5.我擦,为毛要再写一个ThreadLocalMap类,直接使用WeakHashMap不行吗??WeakHashMap哪里不满足要求,我一直想不明白,理解太浅!!!!!!!!!!

你可能感兴趣的:(ThreadLocal)