ThreadLocal中含有ThreadLocalMap静态内部类,该类的key值为当前线程对象,value为put进来的value,ThreadLocal的put、set方法都是操作ThreadLocalMap。
static class ThreadLocalMap {
/**
* The entries in this hash map extend WeakReference, using
* its main ref field as the key (which is always a
* ThreadLocal object). Note that null keys (i.e. entry.get()
* == null) mean that the key is no longer referenced, so the
* entry can be expunged from table. Such entries are referred to
* as "stale entries" in the code that follows.
*/
static class Entry extends WeakReference<ThreadLocal> {
Entry extends WeakReference
由于Entry继承WweakReference,则当Entry长时间没有使用,不需要等到Entry没有任何对象引用,就可被垃圾回收器回收,通过这样弱引用的方式,ThreadLocal解决了内存泄露的问题。