JDK源码如是说:
1、内部存储元素采用ThreadLocalMap,其内部
1.1、Entry继承WeakReference<ThreadLocal<?>>,
方便垃圾回收key。每次get()——>getEntry()——>getEntryAfterMiss——>expungeStaleEntry删除key为null的值。
1.2、使用ThreadLocal作为key,减少Entry的key数量,提高性能。
2、使用时,继承
protected T initialValue() {
return null;
}
添加需要返回的对象。
建议将ThreadLocal变量定义成private static的,这样的话ThreadLocal的生命周期就更长,由于一直存在ThreadLocal的强引用,所以ThreadLocal也就不会被回收,也就能保证任何时候都能根据ThreadLocal的弱引用访问到Entry的value值,然后remove它,防止内存泄露。
ps:ThreadLocal中对象只是当前线程存储在map中的副本。
原文:https://www.cnblogs.com/codegod/p/9059248.html