Java ThreadLocal 中的 setInitialValue 似乎是多余的?简直是负优化

2020-09-23 16:35:47 +08:00
 theworldsong
不服来辩,欢迎讨论。

当 ThreadLocal 在没有 set 的情况下,第一次调用 get,就会走到 setInitialValue,最后返回一个默认值(如果没重写 initialValue 则为 null )。

这个过程中,setInitialValue 里面把 ThreadLocalMap 给初始化了,这导致:即使从来没有 set 过,以后调用 get 也每次都要去 ThreadLocalMap 里面拿。

不科学啊。明明直接返回默认值就可以了
762 次点击
所在节点    程序员
2 条回复
syozzz
2020-09-30 14:13:26 +08:00
我觉得是你理解错误了,ThreadLocal get 或者 set 的操作,操作对象并不是 ThreadLocal,而是实际执行方法的 Thread.currentThread() 对象,而这个 ThreadLocalMap 就是每个 Thread 对象的 threadLocals 成员。所以不管你有没有 set 过,当然都要去 threadLocals 里面拿。
yzdobest
2021-03-22 17:00:09 +08:00
老哥找到答案了吗,我现在也比较疑惑

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/709827

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX