千家信息网

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

发表于:2025-12-04 作者:千家信息网编辑
千家信息网最后更新 2025年12月04日,本篇文章为大家展示了ThreadLocal是如何和各个Thread之间建立起关联的,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。我们来看 ThreadLoca
千家信息网最后更新 2025年12月04日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安全错误 数据库的锁怎样保障安全 数据库专业面试问题吗 网络安全为人民手抄报字少的 关于网络安全进校园的内容 网络安全应急响应准备阶段 2004年amd高端服务器主板 远程连接vpn服务器 软件开发文档基本格式 聊城华科网络技术 软件开发文档背景图全屏 网络安全扫描软件图标 上海维吉莱互联网科技有限公司 使用x86架构服务器 管理数据库的叫什么 软件开发劳务坑 国内网络安全攻击事件 软件开发两种类型bc 杭州市云搜网络技术有限公司 无线网络技术科技有限公司 企业网络技术人员考核 计算机一等级考试网络安全 小海豚数据库怎么移除数据库 电竞酒店服务器安装位置 如何评估软件开发的时间 关系数据库有哪几种基本关系运算 软件开发中的多线程案例 服务器支持什么编程语言 将应用放到服务器上使用 华南理工大学 网络安全 镜像如何导入服务器 怎么是网络安全
0