ThreadLocal个人理解
1.Thread类中存在一个ThreadLocalMap变量
每个线程从ThreadLocal中取出来的值都是从这个ThreadLocalMap中取出来的
2.看ThreadLocal的set方法(首先得Set,Get才有意义)
此处this就必然是当前使用ThreadLocal对象,点进去看getMap()方法
发现返回的是当前线程的成员变脸ThreadLocalMap对象,此处第一次使用,必然是空的。所以再看createMap()方法
此时,创建了一个ThreadLocalMap对象,并将值赋予Thread的成员变量,而我们也可以发现,这个对象存储的Key值是当前ThreadLocal对象本身,值则是set()进来的那个值。
所以,我们可以很清楚的看懂了,原来ThreadLocal对象set值的时候,会创建一个key为自己本身的ThreadLocalMap对象给当前线程,所以当我们再去看ThreadLocal的get方法就会一目了然。
所以说,当前线程结束的时候,ThreadLocalMap也会随之消失,可以很好的控制内存泄露。
更深层次的研究,参考原文地址。
https://www.jianshu.com/p/0ba78fe61c40