• 请不要在回答技术问题时复制粘贴 AI 生成的内容
theworldsong
V2EX  ›  程序员

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

  •  
  •   theworldsong · Sep 23, 2020 · 1523 views
    This topic created in 2074 days ago, the information mentioned may be changed or developed.
    不服来辩,欢迎讨论。

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

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

    不科学啊。明明直接返回默认值就可以了
    2 replies    2021-03-22 17:00:09 +08:00
    syozzz
        1
    syozzz  
       Sep 30, 2020
    我觉得是你理解错误了,ThreadLocal get 或者 set 的操作,操作对象并不是 ThreadLocal,而是实际执行方法的 Thread.currentThread() 对象,而这个 ThreadLocalMap 就是每个 Thread 对象的 threadLocals 成员。所以不管你有没有 set 过,当然都要去 threadLocals 里面拿。
    yzdobest
        2
    yzdobest  
       Mar 22, 2021
    老哥找到答案了吗,我现在也比较疑惑
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   932 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 19:22 · PVG 03:22 · LAX 12:22 · JFK 15:22
    ♥ Do have faith in what you're doing.