V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
asfdsafdas
V2EX  ›  问与答

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

  •  1
     
  •   asfdsafdas · 2022-10-19 10:46:06 +08:00 · 2576 次点击
    这是一个创建于 759 天前的主题,其中的信息可能已经有所发展或是发生改变。
    java 中 Threadlocal 作用是 保证一个线程一直可以持有一些对象,线程独占他吧。那为什么不在 Thread 类中直接写一个 Map 呢?要存东西直接在那个 map 里面存呀!每个线程还不是独占这个内容。为什么还需要 ThreadLocal ?
    12 条回复    2022-10-19 18:36:14 +08:00
    AoEiuV020CN
        1
    AoEiuV020CN  
       2022-10-19 10:56:38 +08:00
    不明白你说的 map ,是指所有线程共用一个 map 然后 thread 当 key 吗?这样共用 map 不就有线程冲突的可能了,不等价吧,
    asfdsafdas
        2
    asfdsafdas  
    OP
       2022-10-19 11:08:36 +08:00
    @AoEiuV020CN
    我的理解大概这个意思
    [![xs3w5Q.png]( https://s1.ax1x.com/2022/10/19/xs3w5Q.png)]( https://imgse.com/i/xs3w5Q)
    zxCoder
        3
    zxCoder  
       2022-10-19 11:16:53 +08:00
    @asfdsafdas 看不出这个线程有什么关系?除了类名
    AoEiuV020CN
        4
    AoEiuV020CN  
       2022-10-19 11:30:46 +08:00
    @asfdsafdas #2 这不就是个普通的对象,拥有一个普通的 map ,看不出来你想设计什么,
    enoc
        5
    enoc  
       2022-10-19 11:31:13 +08:00   ❤️ 1
    SoloCompany
        6
    SoloCompany  
       2022-10-19 13:24:58 +08:00   ❤️ 1
    ThreadLocal 在抽象上的确就是一个 Map 啊 (实际上实现也是), 只不过这个 map 的 key 不是你想象中的 string, 而是 ThreadLocal 定义的变量本身的抽象
    xiao109
        7
    xiao109  
       2022-10-19 13:34:13 +08:00
    @enoc 一击必杀,Stack Overflow 真是个好网站,啥刁钻的问题都有解答
    bk201
        8
    bk201  
       2022-10-19 14:05:51 +08:00
    你反问他为什么
    xilou31
        9
    xilou31  
       2022-10-19 14:12:13 +08:00   ❤️ 1
    因为 Thread 类是线程呀,线程这个概念是没有 Map 的。

    这应该是叫做面向对象编程设计原则里面的「单一功能原则」?
    zoyua
        10
    zoyua  
       2022-10-19 18:06:13 +08:00
    因为 threadlocal 就是这么设计的,你看源码,它就是用 ThreadLocalMap 存的
    leonshaw
        11
    leonshaw  
       2022-10-19 18:21:38 +08:00   ❤️ 1
    如何拿到当前线程的 Thread ?—— 把 Thread 对象存到 ThreadLocal 里。
    7911364440
        12
    7911364440  
       2022-10-19 18:36:14 +08:00
    在 Thread 类中定义一个 Map 也是没问题的,我觉得正确答案应该就是 5 楼说的,实现 ThreadLocal 的时候还没有 HashMap
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2739 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 10:00 · PVG 18:00 · LAX 02:00 · JFK 05:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.