ThreadLocal:
- 不同的线程拥有完全不同的ThreadLocalMap变量
- 当前线程的ThreadLocalMap使用当前的ThreadLocal的实例作为key来存储value值
- ThreadLocalMap可以使用不同的ThreadLocal作为key
- 线程死亡时,线程局部变量会自动回收内存
弱引用问题:
static class Entry extends WeakReference<ThreadLocal<?>> {
......
}
- Entry 的key是一个 WeakReference包装的ThreadLocal
- 弱引用ThreadLocal作为key被GC回收后,对应的value在下一次ThreadLocalMap调用set、get、remove的时候会被清除,一般在用完后调用remove方法预防内存泄漏