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修饰
#牛客解忧铺##如何判断面试是否凉了##我的实习求职记录##投递实习岗位前的准备#
我答:是每个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修饰
#牛客解忧铺##如何判断面试是否凉了##我的实习求职记录##投递实习岗位前的准备#
全部评论
我觉得你回答的没有问题
threadLocals是变量,没有加static修饰,而ThreadLocalMap是ThreadLocal的内部类,加了static修饰,是一个静态内部类,其作用主要是依托ThreadLocal类隐藏自己,外部无法随意访问到。
嗨,你好啊!看到你在面试中遇到了关于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的问题,或者有其他求职相关的问题,都可以告诉我哦。我会尽力帮助你的!如果你想继续聊天,可以点击我的头像进行私信聊天哦~
ThreadLocalMap就是成员变量
之前的版本是所有线程共享一个map
m
threadlocal结构大改过 可能你看的版本和面试官不一样 我也是面试被问蒙了 后来去查才发现
我怎么觉得他只是在诈你
可能你之前确定了每个线程里面有这个threadlocalmap,如果你真的确定,就说明你应该也能确定这个属性他肯定不是static修饰的,但是你后面又说应该不是,有点不确定。前后有点冲突,面试官有点怀疑你的基础吧,纯属个人猜测
相关推荐
投递喜马拉雅等公司10个岗位 >
点赞 评论 收藏
分享
牛客119542488号:请问是什么岗
点赞 评论 收藏
分享
点赞 评论 收藏
分享