-
ThreadLocal 并不解决线程间共享数据的问题
-
ThreadLocal 适用于变量在线程间隔离且在方法间共享的场景
-
ThreadLocal 通过隐式的在不同线程内创建独立实例副本避免了实例线程安全的问题
-
每个线程持有一个只属于自己的专属Map并维护了ThreadLocal对象与具体实例的映射, 该Map由于只被持有它的线程访问,故不存在线程安全以及锁的问题
-
ThreadLocalMap的Entry对ThreadLocal的引用为弱引用,避免了ThreadLocal对象无法被回收的问题
-
都会通过expungeStaleEntry,cleanSomeSlots,replaceStaleEntry这三个方法回收键为 null 的 Entry 对象的值(即为具体实例)以及 Entry 对象本身从而防止内存泄漏,属于安全加固的方法