1.ThreadLocal对象可以提供线程局部变量,每个线程`Thread`拥有一份自己的副本变量,多个线程互不干扰。线程安全。
2.ThreadLocalMap`有自己的独立实现,可以简单地将它的`key`视作`ThreadLocal`,`value`为代码中放入的值(实际上`key`并不是`ThreadLocal`本身,而是它的一个弱引用)。
3.每个线程在往`ThreadLocal`里放值的时候,都会往自己的`ThreadLocalMap`里存,读也是以`ThreadLocal`作为引用,在自己的`map`里找对应的`key`,从而实现了线程隔离。
4.如果我们的强引用不存在的话,那么 `key` 就会被回收,也就是会出现我们 `value` 没被回收,`key` 被回收,导致 `value` 永远存在,出现内存泄漏。
5.ThreadLocalMap.set()`第一种情况: 通过`hash`计算后的槽位对应的`Entry`数据为空。这里直接将数据放到该槽位即可。
第二种情况: 槽位数据不为空,`key`值与当前`ThreadLocal`通过`hash`计算获取的`key`值一致:这里直接更新该槽位的数据。