Android面试(Java部分)
Q:ThreadLocal原理有了解过吗?简单讲一下你知道的
ThreadLocal准确来说并不是用来解决线程同步问题,而是用来做线程隔离的,确保每个线程可以读到其变量副本,主要实现可以参见上图,每个Thread内部维护了一个ThreadLocalMap变量,而ThreadLocalMap是ThreadLocal的一个内部类,ThreadLocal内部又维护了一个Entry数组,将将前的threadlocal实例为key,以所存实例为value存储在Entry数组中,而Entry中的key弱引用于ThreadLocal,当GC发生时,key被回收,如果很长一段事件内,该threadLocal都没有再电泳get()、set()、或者remove()方法,就会导致存在一条从Thread->ThreadLocalMap->Entry的强引用链使得Entry中的值无法被回收,所以我们在使用完毕之后尽量去调用一下其remove()方法,防止内存泄漏,threadLocal内部当调用remove()、get()及set()方法时会进行key为null而value不为null的处理,使其能够被回收掉