【潘森教育】ThreadLocal 的工作原理

【潘森教育】ThreadLocal 的工作原理

先看看示例 1 中的情况

我们可以看到多个线程可以同时访问公共资源 count,当某个线程在执行 count++ 的时候,可能其他的线程正好同时也执行 count++。但由于多个线程变量 count 的不可见性,会导致另外的线程拿到旧的 count 值 + 1,这样就出现了 realCount 预计是 20,但是实际上是 18 的数据问题。

再看看示例 2 中的情况:

如图所示,往大的方向上说,ThreadLocal 会给每一个线程都创建变量的副本,保证每个线程访问都是自己的副本,相互隔离。

往小的方向上说,每个线程内部都有一个 threadLocalMap,每个 threadLocalMap 里面都包含了一个 entry 数组,而 entry 是由 threadLocal 和数据(这里指的是 count)组成的。这样一来,每个线程都拥有自己专属的变量 count。示例 2 中线程 1 调用 calc 方法时,会先调用的 getCount 方法,由于第一次调用 threadLocal.get() 返回是空的,所以 getCount 返回值是 0。这样 threadLocal.set (getCount () + 1); 就变成了 threadLocal.set (0 + 1); 它会给线程 1 中 threadLocal 的数据值设置成 1。线程 2 再调用 calc 方法,同样会先调用 getCount 方法,由于第一次调用 threadLocal.get () 返回是空的,所以 getCount 返回值也是 0。这样 threadLocal.set (getCount () + 1); 会给线程 2 中 threadLocal 的数据值也设置成 1。。。。。。最后每个线程的 threadLocal 中的数据值都是 1。

特别声明:[【潘森教育】ThreadLocal 的工作原理] 该文观点仅代表作者本人,今日霍州系信息发布平台,霍州网仅提供信息存储空间服务。

猜你喜欢

商务部就美方要求相关方面以进口俄罗斯石油为由对华加征关税情况答记者问(美商务部将23家)

商务部新闻发言人就美方要求相关方面以进口俄罗斯石油为由对华加征关税情况答记者问。有记者问:近期,美方要求七国集团及北约以中国购买俄罗斯石油为由,对中国征收50%-100%关税,以推动中方在结束俄乌冲突上发挥作用。请问商务部有何回应?商务部新

商务部就美方要求相关方面以进口俄罗斯石油为由对华加征关税情况答记者问(美商务部将23家)

56岁高龄妈妈顺利分娩双胞胎 医疗奇迹诞生(65岁高龄产子)

9月9日上午,佛山市妇幼保健院三水医院产科迎来了一位特殊的产妇——56岁的贾女士。在经历了数月的高危妊娠后,她顺利分娩了一对双胞胎男婴。贾女士含泪向医护人员表达了深深的感谢

56岁高龄妈妈顺利分娩双胞胎 医疗奇迹诞生(65岁高龄产子)

AI美化PPT:全方位深度测试两大AI办公工具【独家(ai教程ppt)

维度1:上传美化PPT测试对已有PPT文件的识别能力和美化效果维度2:全文美化能力评估一键整体美化的效率和质量维度3:单页美化精度考察针对特定页面的精准优化能力维度4:局部内容美化测试对特定元素的精细化调整…

AI美化PPT:全方位深度测试两大AI办公工具【独家(ai教程ppt)

博士后和访问学者有什么区别(博士后和访问学者认可度)

1. 博士后:博士后研究人员在特定领域进行深入研究,需要与导师或研究团队紧密合作,研究任务和目标较为明确,因此自由度相对较低。 博士后和访问学者在学术界都扮演着重要的角色,但它们在目的、资金来源、研究自由度…

博士后和访问学者有什么区别(博士后和访问学者认可度)

今日潍坊:这座山东小城,凭什么火出圈?(每日潍坊)

潍坊,不只是“世界风筝之都”,更是一座藏着千年文脉与烟火气息的宝藏城市。从街头巷尾飘舞的风筝,到非遗手作、老字号美食,再到现代化产业新地标,潍坊正以独特魅力刷新大众认知。本文带你深度揭秘潍坊的文化基因、必打卡景点、地道美食与旅行贴士,看完你

今日潍坊:这座山东小城,凭什么火出圈?(每日潍坊)