ThreadLocal解析

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: ThreadLocalThreadLocal 中有一个静态内部类 ThreadLocalMap,ThreadLocalMap 维护一个 Entry 数组,大小为 16,Entry 以弱引用的 ThreadLocal 作为 key,value 就是我们要设置的值。

ThreadLocal
ThreadLocal 中有一个静态内部类 ThreadLocalMap,ThreadLocalMap 维护一个 Entry 数组,大小为 16,Entry 以弱引用的 ThreadLocal 作为 key,value 就是我们要设置的值。在 Thread 内部维护一个 ThreadLocalMap 的变量,也就是说每个线程都有一个 ThreadLocalMap 的变量,互相之间不干扰,当我们需要使用线程局部变量时,就以 ThreadLocal 对象作为 key,以存储的值作为变量,放入当前线程的ThreadLocalMap 中。
ThreadLocal 的方法:

public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null)
return (T)e.value;
}
return setInitialValue();
}
private T setInitialValue() {
T value = initialValue();
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
return value;}
public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null)
map.set(this, value);
else
createMap(t, value);
}
public void remove() {
ThreadLocalMap m = getMap(Thread.currentThread());
if (m != null)
m.remove(this);
}

ThreadLocalMap 的回收:
当 线 程 死 亡 时 , 那 么 所 有 的 保 存 在 的 线 程 局 部 变 量 就 会 被 回 收 , 其 实 这 里 是 指 线 程 Thread 对 象 中 的ThreadLocal.ThreadLocalMap threadLocals 会被回收。
如果线程可以活很长的时间,并且该线程保存的线程局部变量有很多(也就是 Entry 对象很多),那么就涉及到在线程的生命期内如何回收 ThreadLocalMap 的内存了。 Entry 对象的 key 是 WeakReference 的包装,当 ThreadLocalMap 的private Entry[] table,已经被占用达到了三分之二时 threshold = 2/3(也就是线程拥有的局部变量超过了 10 个) ,就会尝试回收 Entry 对象

具体如何实现的可以看这篇:

https://blog.csdn.net/huachao1001/article/details/51734973

目录
相关文章
|
7月前
|
缓存 监控 Java
ThreadLocal 源码解析get(),set(), remove()用不好容易内存泄漏
ThreadLocal 源码解析get(),set(), remove()用不好容易内存泄漏
89 1
|
7月前
|
存储 Java 中间件
《吊打面试官系列》从源码全面解析 ThreadLocal 关键字的来龙去脉
《吊打面试官系列》从源码全面解析 ThreadLocal 关键字的来龙去脉
|
7月前
|
缓存 前端开发 Java
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能
174 1
|
6月前
|
存储 安全 Java
深入理解Java中的ThreadLocal机制:原理、方法与使用场景解析
深入理解Java中的ThreadLocal机制:原理、方法与使用场景解析
102 2
|
6月前
|
存储 安全 Java
《ThreadLocal使用与学习总结:》史上最详细由浅入深解析ThreadLocal
《ThreadLocal使用与学习总结:》史上最详细由浅入深解析ThreadLocal
51 0
|
Java
ThreadLocal全面解析
ThreadLocal全面解析
123 0
|
7月前
|
存储 Java 数据库连接
ThreadLocal的原理解析以及应用场景分析
ThreadLocal的原理解析以及应用场景分析 什么是ThreadLocal? ThreadLocal是Java中的一个线程管理工具,用于保证线程间数据的独立性。每个ThreadLocal对象可以存储一个线程局部变量,即对于同一个ThreadLocal对象,每个线程都有自己独立的变量。
|
存储 Java 数据安全/隐私保护
ThreadLocal的实现原理&源码解析
ThreadLocal是Java中的一个线程封闭机制,它提供了一种线程局部变量的解决方案,可以使每个线程都拥有自己独立的变量副本,互不干扰。
98 0
|
存储 算法 Java
ThreadLocal原理解析
ThreadLocal原理解析
108 1
ThreadLocal原理解析
|
存储 Java 索引
ThreadLocal原理解析(2):ThreadLocalMap源码解析
ThreadLocal原理解析(2):ThreadLocalMap源码解析

推荐镜像

更多
下一篇
DataWorks