请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于ThreadLocal的一段描述

老师,您好。“从概念上看,你可以将ThreadLocal视为包含了Map<Thread,T>对象,其中保存了特定于该线程的值,但ThreadLocal的实现并非如此“,这句话为什么说ThreadLocal的实现并非如此?

正在回答 回答被采纳积分+3

1回答

Jimin 2020-11-01 06:52:43

你好,可以看下https://mp.weixin.qq.com/s/e_X9sxVfLKMXdzVS_Kk18Q 这篇文章里工作原理部分的图,重点是:

• 每个Thread的内部都有一个ThreadLocalMap对象来存储ThreadLocal设置的值。而且每个对象都是独立的

• 对每个ThreadLocal设置的值(调用set方法), ThreadLocalMap都会保存<ThreadLocal<T>, T>这样一个map值。

• 具体ThreadLocal设置过来的值,存放的位置对于每个Thread, 是有可能不一样的。ThreadLocalMap 本质使用的是斐波那契散列(本质上是一个乘法散列法),碰撞冲突解决是通过开放定址法, 且是线性探测(linear-probe),并且通过使用0x61c88647 这个神奇的数字,让结果能均匀的分布在2的N次方的数组里(ThreadLocalMap的初始大小为16,size的扩展是以2倍的基数进行扩展)。

1 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信