千家信息网

ThreadLocal是如何和各个Thread之间建立起关联的

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,本篇文章为大家展示了ThreadLocal是如何和各个Thread之间建立起关联的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们来看 ThreadLoca
千家信息网最后更新 2026年11月03日ThreadLocal是如何和各个Thread之间建立起关联的

本篇文章为大家展示了ThreadLocal是如何和各个Thread之间建立起关联的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

我们来看 ThreadLocal 是如何和各个 Thread 之间建立起关联的呢?

我们来看,每个Thread,都有这样一个属性,一个ThreadLocal.ThreadLocalMap的属性,能互不影响的秘密都在这里。

/* ThreadLocal values pertaining to this thread. This map is maintained

* by the ThreadLocal class. */

ThreadLocal.ThreadLocalMap threadLocals = null;

这个ThreadLoalMap是什么时候被设置值的呢?

我们来看ThreadLocal的使用。

一般的用法是:

ThreadLocal local = new ThreadLocal() {

protected Integer initialValue() {

return 1;

}

};

然后使用这个ThreadLocal变量进行set和get操作。

set的时候,会先判断对于当前线程,是否已经分配了map,没有则创建。

public void set(T value) {

Thread t = Thread.currentThread();

ThreadLocalMap map = getMap(t);

if (map != null)

map.set(this, value);

else

createMap(t, value);

}

是否已经分配过map就是根据当前线程的 theThreadLocals 属性来判断的

ThreadLocalMap getMap(Thread t) {

return t.threadLocals;

}

那createMap的时候,就会给当前线程的threadLocals赋值

void createMap(Thread t, T firstValue) {

t.threadLocals = new ThreadLocalMap(this, firstValue);

}

这个ThreadLocalMap里是以数组的形式放的多个Entry。

在 get 的时候,如果没数据会根据上面的initValue方法创建一个新的返回。这样多个线程用的就是不同的东西了。

那这里还有一点,对于不同的东西, ThreadLocal 可以通过泛型做区分,当然你也能一股脑的放到一起,那取的时候就费劲了。

上述内容就是ThreadLocal是如何和各个Thread之间建立起关联的,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注行业资讯频道。

时候 线程 之间 立起 关联 就是 属性 不同 东西 内容 多个 技能 知识 分配 简明 费劲 一股脑 简明扼要 变量 可以通过 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 亿人帮互联网科技有限公司 河南真二互联网科技有限公司 南京欣网互联网科技 百单互联网科技有限公司 新浪科技互联网 互联网科技公司名称 衡水科技产业互联网平台 青海省互联网新科技 互联网 科技馆 广州恒生互联网科技有限 互联网科技创新服务 互联网对科技的发展 荆州市昕露互联网络科技有限公司 青岛科技大学互联网大赛研究生 互联网安防科技感 九思连强互联网电子科技有限公司 艺电能源互联网科技有限公司招聘 西安左小互联网科技有限公司 恒生科技指数 中概互联网 广东猪兼强互联网科技有限公司 互联网科技公司的优势 互联网下的科技发展 互联网与科技金融数据 左右互联网络科技 字节跳动和互联网科技 贵州叶脉互联网科技有限公司所属行业 互联网科技与管理 哈尔滨屹滨互联网科技有限公司 广州百诚互联网科技有限公司官网
0