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不是方便很多吗???