ThreadLocal类是为了实现让每一个线程拥有自己的本地专属变量
如果创建了一个ThreadLocal变量,那么访问这个变量的所有线程都会有这个变量的本地副本,并可以使用get()或set()方法来获取默认值或者将其值修改为当前线程所存副本的值,避免线程安全问题。
ThreadLocal变量定义:
线程修改结果:
ThreadLocal原理:
Thread类中有ThreadLocalMap类型的变量,所以每个线程都拥有一个ThreadLocalMap,当线程调用ThreadLocal对象的get(),set()方法时才会创建它。ThreadLocalMap的key就是ThreadLocal对象,value就是ThreadLocal对象调用set()方法设置的值。
ThreadLocal的set()方法:
内存泄漏问题:
ThreadLocalMap中的key为ThreadLocal弱引用,value为强引用;value永远无法被GC回收,
因此在调用set(),get(),remove()方法之前清除key为null的记录。