📄️ ThreadLocal底层实现原理?
ThreadLocal 本身并不提供存储数据的功能,当我们操作 ThreadLocal 的时候,实际上操作线程对象的一个名为 threadLocals 成员变量。这个成员变量的类型是 ThreadLocal 的一个内部类 ThreadLocalMap,它是真正用来存储数据的容器。因此,不同线程间的数据从物理上就是隔离的,所以 ThreadLocal 不需要任何同步机制也天然是线程安全的。
📄️ ThreadLocal什么场景内存泄露?
ThreadLocalMap 本身在进行增删改查的时候会自动对失效的数据进行一定程度的清理,不过这里的清理始终是有限且滞后的,它只能视 JVM 分配的内存大小、访问 ThreadLocal 的线程数量、线程对 ThreadLocal 的访问频率……等因素,一定程度上减少因为内存泄露而导致发生 OOM 的可能性。
📄️ ThreadLocal有哪些扩展实现?
由于 ThreadLocal 的数据是绑定到线程对象的,因此线程之间的 ThreadLocal 其实是彼此隔离的,所以当我们在父线程调用的子线程时,子线程是无法获取到父线程的数据的。常见的扩展有:InheritableThreadLocal、TransmittableThreadLocal、FastThreadLocal。