V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
asfdsafdas
V2EX  ›  问与答

面试官问我 ThreadLocal 为什么这么设计。。。

  •  1
     
  •   asfdsafdas · Oct 19, 2022 · 3221 views
    This topic created in 1286 days ago, the information mentioned may be changed or developed.
    java 中 Threadlocal 作用是 保证一个线程一直可以持有一些对象,线程独占他吧。那为什么不在 Thread 类中直接写一个 Map 呢?要存东西直接在那个 map 里面存呀!每个线程还不是独占这个内容。为什么还需要 ThreadLocal ?
    12 replies    2022-10-19 18:36:14 +08:00
    AoEiuV020CN
        1
    AoEiuV020CN  
       Oct 19, 2022
    不明白你说的 map ,是指所有线程共用一个 map 然后 thread 当 key 吗?这样共用 map 不就有线程冲突的可能了,不等价吧,
    asfdsafdas
        2
    asfdsafdas  
    OP
       Oct 19, 2022
    @AoEiuV020CN
    我的理解大概这个意思
    [![xs3w5Q.png]( https://s1.ax1x.com/2022/10/19/xs3w5Q.png)]( https://imgse.com/i/xs3w5Q)
    zxCoder
        3
    zxCoder  
       Oct 19, 2022
    @asfdsafdas 看不出这个线程有什么关系?除了类名
    AoEiuV020CN
        4
    AoEiuV020CN  
       Oct 19, 2022
    @asfdsafdas #2 这不就是个普通的对象,拥有一个普通的 map ,看不出来你想设计什么,
    enoc
        5
    enoc  
       Oct 19, 2022   ❤️ 1
    SoloCompany
        6
    SoloCompany  
       Oct 19, 2022   ❤️ 1
    ThreadLocal 在抽象上的确就是一个 Map 啊 (实际上实现也是), 只不过这个 map 的 key 不是你想象中的 string, 而是 ThreadLocal 定义的变量本身的抽象
    xiao109
        7
    xiao109  
       Oct 19, 2022
    @enoc 一击必杀,Stack Overflow 真是个好网站,啥刁钻的问题都有解答
    bk201
        8
    bk201  
       Oct 19, 2022
    你反问他为什么
    xilou31
        9
    xilou31  
       Oct 19, 2022   ❤️ 1
    因为 Thread 类是线程呀,线程这个概念是没有 Map 的。

    这应该是叫做面向对象编程设计原则里面的「单一功能原则」?
    zoyua
        10
    zoyua  
       Oct 19, 2022
    因为 threadlocal 就是这么设计的,你看源码,它就是用 ThreadLocalMap 存的
    leonshaw
        11
    leonshaw  
       Oct 19, 2022   ❤️ 1
    如何拿到当前线程的 Thread ?—— 把 Thread 对象存到 ThreadLocal 里。
    7911364440
        12
    7911364440  
       Oct 19, 2022
    在 Thread 类中定义一个 Map 也是没问题的,我觉得正确答案应该就是 5 楼说的,实现 ThreadLocal 的时候还没有 HashMap
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1028 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 19:01 · PVG 03:01 · LAX 12:01 · JFK 15:01
    ♥ Do have faith in what you're doing.