threadlocal类

1.threadlocal对象为线程提供变量的副本,该副本为线程私有的,其它线程访问不到;

2.变量的副本存储在ThreadLocalMap对象中;

3.使用threadlocal时候,最好先使用initialValue protected,或者set方法设置初始值,否则get方法取出来的是null;

在多线程情况下存在内存泄漏问题:

4.threadlocalmap中保存的entry,key是弱引用,当把threadLocal实例置为null以后,没有任何强引用指向threadLocal实例,所以threadLocal将会被gc回收,但是value却不能被回收,因为其还存在于ThreadLocal.ThreadLocalMap的对象的Entry之中,只有当前Thread结束之后,所有与当前线程有关的资源才会被GC回收。如果在线程池中使用ThreadLocal,由于线程会复用,而又没有显示的调用remove的话的确是会有可能发生内存泄露的问题。

5.get/set expungeStaleEntry

原文地址:https://www.cnblogs.com/lelouchKOP/p/5786595.html