ThreadLocal解析。
--当调用threadLocal.set(v)时,会从Thread类中获取一个静态的ThreadLocalMap对象。--然后将threadLocal当作key,v当作value放到ThreadLocalMap对象中。
ThreadLocal变量又叫线程本地变量,也就是说,都让当前线程内部的ThreadLocalMap给代理了。
所以,每个线程只能处理自己的数据。
--当我们调用threadLocal.get()时,会从Thread类中获取一个静态的ThreadLocalMap对象。
--然后将自己(threadLocal)当作key,从ThreadLocalMap对象中取出对应的值。
--假如在一个线程的生命周期内,你只调用的threadLocal.set(v),而没有调用threadLocal.remove(),是不是会有内存泄露呢?
答案是:否。因为ThreadLocalMap中的Entry继承了WeakReference,在内存不足时,会自动清理。
所以,如果线程的生命周期太长,而此时内存又不足,那么,你设置的纯种本地变量也就被清除了,如果你再调用threadLocal.get(),就拿不到相应的值了。
ThreadLocal源码如下:
本文详细介绍了ThreadLocal的工作原理,包括set和get方法的具体实现过程,解释了如何通过ThreadLocalMap来存储线程本地变量,并讨论了内存回收机制,避免内存泄漏的问题。
2377

被折叠的 条评论
为什么被折叠?



