ThreadLocal面经求解答

今天面试某大厂的时候,面试官问我,ThrealLocal原理是什么?

我答:是每个Thread里面都有一个ThrealLocalMap,key是ThrealLocal,value是我们存的Object,当我们调用set的时候,就会去当前线程所持有的ThrealLocalMap放入一个k-v对,k是当前的ThrealLocal对象,value是Object,当我们调用get的时候,会去ThrealLocalMap中,找到当前ThrealLocal对象对应的value返回

面试官反问:你确定ThrealLocalMap是每个线程的都持有一个吗?不是所有线程共享的吗?

我答:确定

面试官反问:那线程里的ThrealLocalMap是用static变量修饰的吗?

我答:应该不是

面试官:你可以回去再看一看

听面试官的意思是我答的不对,但刚刚我看源码,我好像就是每个Thread都持有一个ThreadLocalMap,不知道是不是我理解错了,请各位大佬解答一下。

附上源码
前面几张图是get&set方法,最后一张是Thread持有ThreadLocalMap,并没有用static修饰

#牛客解忧铺##如何判断面试是否凉了##我的实习求职记录##投递实习岗位前的准备#
全部评论
我觉得你回答的没有问题
6 回复 分享
发布于 2023-09-05 17:46 陕西
threadLocals是变量,没有加static修饰,而ThreadLocalMap是ThreadLocal的内部类,加了static修饰,是一个静态内部类,其作用主要是依托ThreadLocal类隐藏自己,外部无法随意访问到。
4 回复 分享
发布于 2023-09-16 22:40 广东
嗨,你好啊!看到你在面试中遇到了关于ThreadLocal的问题,我来帮你解答一下。 根据你的描述,你的回答基本是正确的。每个线程确实都有一个ThreadLocalMap,其中key是ThreadLocal对象,value是我们存储的Object。当我们调用set方法时,会将当前ThreadLocal对象和对应的value存入当前线程的ThreadLocalMap中。而调用get方法时,会根据当前ThreadLocal对象在ThreadLocalMap中找到对应的value并返回。 至于面试官的反问,ThreadLocalMap并不是所有线程共享的,而是每个线程都持有一个独立的ThreadLocalMap。这是因为ThreadLocal的设计初衷就是为了在多线程环境下实现线程间的数据隔离。 关于ThreadLocalMap是否使用static修饰,根据你提供的源码,Thread确实持有一个ThreadLocalMap,但并没有使用static修饰。这是因为每个线程都有自己独立的ThreadLocalMap,不需要使用static修饰。 如果你还有其他关于ThreadLocal的问题,或者有其他求职相关的问题,都可以告诉我哦。我会尽力帮助你的!如果你想继续聊天,可以点击我的头像进行私信聊天哦~
1 回复 分享
发布于 2023-09-05 17:16 AI生成
ThreadLocalMap就是成员变量
1 回复 分享
发布于 2023-09-06 03:52 宁夏
之前的版本是所有线程共享一个map
1 回复 分享
发布于 2023-09-10 01:38 广西
m
点赞 回复 分享
发布于 2023-09-05 17:47 北京
threadlocal结构大改过 可能你看的版本和面试官不一样 我也是面试被问蒙了 后来去查才发现
点赞 回复 分享
发布于 2023-09-09 00:09 湖北
我怎么觉得他只是在诈你
点赞 回复 分享
发布于 2023-10-15 00:28 江西
可能你之前确定了每个线程里面有这个threadlocalmap,如果你真的确定,就说明你应该也能确定这个属性他肯定不是static修饰的,但是你后面又说应该不是,有点不确定。前后有点冲突,面试官有点怀疑你的基础吧,纯属个人猜测
点赞 回复 分享
发布于 08-03 11:28 广东

相关推荐

头像
10-16 17:03
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
7 51 评论
分享
牛客网
牛客企业服务