ThreadLocal 使用弱引用作为 key 的原因如下: 避免内存泄露:当 ThreadLocal 对象不再被外部引用时,由于 ThreadLocalMap 中的 key 是弱引用类型,它会被垃圾回收器回收。这样,ThreadLocalMap 中的 Entry(key-value 对)就会变成一个无效的 Entry,当下次 ThreadLocalMap 调整大小时,这个 Entry 会被清除,从而避免了内...
所以ThreadLocal其实是没有Key的,这里的key指的的是ThreadLocalMap的key,也就是当前的ThreadLocal。
ThreadLocalMap是ThreadLocal的内部类,用于存储每个线程的本地变量副本。 当我们使用ThreadLocal的set方法设置变量值时,实际上是将变量值存放到当前线程的ThreadLocalMap中,以ThreadLocal对象作为Key。当我们使用ThreadLocal的get方法获取变量值时,实际上是从当前线程的ThreadLocalMap中获取以ThreadLocal对象为Key的变量值。...
不仅仅是内存泄露的问题,因为线程池中的线程是重复使用的,意味着这个线程的 ThreadLocalMap 对象也是...
ThreadLocal 使用弱引用作为 key 的原因如下: 避免内存泄露:当 ThreadLocal 对象不再被外部引用时,由于 ThreadLocalMap 中的 key 是弱引用类型,它会被垃圾回收器回收。这样,ThreadLocalMap 中的 Entry(key-value 对)就会变成一个无效的 Entry,当下次 ThreadLocalMap 调整大小时,这个 Entry 会被清除,从而避免了内...