1. 谈谈对ThreadLocal的理解
ThreadLocal也叫做线程局部变量,它是用来在线程中保存数据的,保存的数据也只属于当前线程,并且是该线程中独有的变量。ThreadLocal可以用在同一个线程间、不同类或方法中实现数据共享的场景,也可以实现不同线程间数据的隔离场景。
2. ThreadLocal的实现原理
ThreadLocal在底层是使用Thread类中的ThreadLocalMap来存取数据的,每一个线程都拥有一个ThreadLocalMap,在ThreadLocalMap的内部包含了一个Entry数组,每个Entry对象的key为当前线程的ThreadLocal对象,value为存储的数据。通过调用ThreadLocal对象的set()方法可以给线程赋值,get()方法可以从线程局部变量中获取值。
3. ThreadLocal如何避免内存泄露
在使用完ThreadLocal对象后,在finally调用ThreadLocal对象的remove()方法。remove()方法中会把Entry中的key和value都设置成null,这样就能被GC及时回收,无需触发额外的清理机制,所以它能解决内存泄露问题。如果业务代码出现异常,也能及时清理没用的数据。