开发者社区> 问答> 正文

ThreadLocal的实现原理是?

ThreadLocal的实现原理是?

展开
收起
李博 bluemind 2019-03-20 00:18:12 3513 0
7 条回答
写回答
取消 提交回答
  • 关键点:key是当前所定义的ThreadLocal实例化出来的对象。

    2020-02-18 23:00:02
    赞同 展开评论 打赏
  • 通过ThreadLocalMap完成Thread到Object的映射

    2019-07-17 23:31:20
    赞同 展开评论 打赏
  • ThreadLocal的实例代表了一个线程局部的变量,每条线程都只能看到自己的值,并不会意识到其它的线程中也存在该变量。
    它采用采用空间来换取时间的方式,解决多线程中相同变量的访问冲突问题。
    每个Thread的对象都有一个ThreadLocalMap,当创建一个ThreadLocal的时候,就会将该ThreadLocal对象添加到该Map中,其中键就是ThreadLocal,值可以是任意类型。
    set()和get()方法。当调用ThreadLocal的get()方法的时候,会先找到当前线程的ThreadLocalMap,然后再找到对应的值。set()方法也是一样。

    2019-07-17 23:31:20
    赞同 展开评论 打赏
  • ThreadLocalMap维护了线程和值的对应关系,ThreadLocalMap的key是ThreadLocal类的实例对象,value为用户的值,并不是网上大多数的例子key是线程的名字或者标识。
    Thread类中有一个成员变量属于ThreadLocalMap类(一个定义在ThreadLocal类中的内部类),它是一个Map,他的key是ThreadLocal实例对象。
    当为ThreadLocal类的对象set值时,首先获得当前线程的ThreadLocalMap类属性,然后以ThreadLocal类的对象为key,设定value。get值时则类似。
    ThreadLocal变量的活动范围为某线程,是该线程“专有的,独自霸占”的,对该变量的所有操作均由该线程完成!也就是说,ThreadLocal 不是用来解决共享对象的多线程访问的竞争问题的,因为ThreadLocal.set() 到线程中的对象是该线程自己使用的对象,其他线程是不需要访问的,也访问不到的。当线程终止后,这些值会作为垃圾回收。
    由ThreadLocal的工作原理决定了:每个线程独自拥有一个变量,并非是共享的,

    2019-07-17 23:31:20
    赞同 展开评论 打赏
  • 直接看JDK源码最清晰了~ Thread类里面 ThreadLocal.ThreadLocalMap threadLocals , 每个Thread都有一个 ThreadLocalMap,存放了线程相关的 ThreadLocal对象

    2019-07-17 23:31:20
    赞同 展开评论 打赏
  • 技术源于生活

    可以简单的理解有一个Map . K就是每个线程的名字,V就是每个线程里面你要get remove的对象.

    2019-07-17 23:31:20
    赞同 展开评论 打赏
  • 云栖社区Java、Redis、MongoDB运营小编,有意合作请联系钉钉:15810436147

    Threadlocal的原理就是weakhashmap,详细可以参考码出高效

    2019-07-17 23:31:20
    赞同 展开评论 打赏
滑动查看更多
问答地址:
问答排行榜
最热
最新

相关电子书

更多
JAVA反射原理以及一些常见的应用 立即下载
低代码开发师(初级)实战教程 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载