asfdsafdas
V2EX  ›  问与答

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

  •  1
     
  •   asfdsafdas · Oct 19, 2022 · 3739 views
    This topic created in 1480 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
    AoEiuV020CN
    Oct 19, 2022
    1
    不明白你说的 map ,是指所有线程共用一个 map 然后 thread 当 key 吗?这样共用 map 不就有线程冲突的可能了,不等价吧,
    asfdsafdas
    asfdsafdas
    OP
    Oct 19, 2022
    2
    @AoEiuV020CN
    我的理解大概这个意思
    [![xs3w5Q.png]( https://s1.ax1x.com/2022/10/19/xs3w5Q.png)]( https://imgse.com/i/xs3w5Q)
    zxCoder
    zxCoder
    Oct 19, 2022
    3
    @asfdsafdas 看不出这个线程有什么关系?除了类名
    AoEiuV020CN
    AoEiuV020CN
    Oct 19, 2022
    4
    @asfdsafdas #2 这不就是个普通的对象,拥有一个普通的 map ,看不出来你想设计什么,
    SoloCompany
    SoloCompany
    Oct 19, 2022❤️1
    6
    ThreadLocal 在抽象上的确就是一个 Map 啊 (实际上实现也是), 只不过这个 map 的 key 不是你想象中的 string, 而是 ThreadLocal 定义的变量本身的抽象
    xiao109
    xiao109
    Oct 19, 2022
    7
    @enoc 一击必杀,Stack Overflow 真是个好网站,啥刁钻的问题都有解答
    bk201
    bk201
    Oct 19, 2022
    8
    你反问他为什么
    xilou31
    xilou31
    Oct 19, 2022❤️1
    9
    因为 Thread 类是线程呀,线程这个概念是没有 Map 的。

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