采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师,您好。“从概念上看,你可以将ThreadLocal视为包含了Map<Thread,T>对象,其中保存了特定于该线程的值,但ThreadLocal的实现并非如此“,这句话为什么说ThreadLocal的实现并非如此?
你好,可以看下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.7k 1
1.1k 18
1.1k 15
3.5k 12
1.2k 12