V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
theworldsong
V2EX  ›  程序员

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

  •  
  •   theworldsong · 2020-09-23 16:35:47 +08:00 · 888 次点击
    这是一个创建于 1526 天前的主题,其中的信息可能已经有所发展或是发生改变。
    不服来辩,欢迎讨论。

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

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

    不科学啊。明明直接返回默认值就可以了
    2 条回复    2021-03-22 17:00:09 +08:00
    syozzz
        1
    syozzz  
       2020-09-30 14:13:26 +08:00
    我觉得是你理解错误了,ThreadLocal get 或者 set 的操作,操作对象并不是 ThreadLocal,而是实际执行方法的 Thread.currentThread() 对象,而这个 ThreadLocalMap 就是每个 Thread 对象的 threadLocals 成员。所以不管你有没有 set 过,当然都要去 threadLocals 里面拿。
    yzdobest
        2
    yzdobest  
       2021-03-22 17:00:09 +08:00
    老哥找到答案了吗,我现在也比较疑惑
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3581 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 04:36 · PVG 12:36 · LAX 20:36 · JFK 23:36
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.