ThreadLocal实现原理
ThreadLocal实现原理
答:当使用ThreadLocal维护变量时,Threadlocal为每个使用该变量的线程提供独立的变量副本,每个线程都可以独立的改变自己的副本,而不影响其他线程的变量副本。
每个线程Thread都有一个 ThreadLocal.ThreadLocalMap成员,用来保存与线程相关的变量。
一个线程中可以new多个ThreadLocal对象(工具类),Entry数组存储以每个ThreadLocal对象为key的key-value对。
使用WeakReference:当ThreadLocal没有强引用时,以ThreadLocal为key的entry
都应该被回收,因为已经无法得到entry中的值,如果使用强引用的话,ThreadLocal在线程生命周期内始终无法回收,当使用弱引用时,ThreadLocal会自动被gc回收,即使线程仍然存在(长时间线程)。
ThreadLocal内存泄漏:当ThreadLocal没有强引用时,ThreadLocal自动被gc回收,这时key=null,但value并没有释放,只有在get、set、remove时才会清除key=null的entry。