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