ThreadLocalMap为什么要定义在ThreadLocal中,而不直接定义在Thread中?

ThreadLocalMap为什么要定义在ThreadLocal中,而不直接定义在Thread中?

刚看了一下ThreadLocal的源码,刚开始一直看不懂为什么ThreadLocalMap中要定义一个Entry。

最初的理解是只需要在ThreadLocalMap中定义一个Object类型的成员变量就可以了,直到看到网上看到有博主在手机上画的一幅草图才明白:

一个ThreadLocal对应一个线程,但是可没人说一个线程也只能有一个ThreadLocal。

发现ThreadLocalMap的作用是存放多个ThreadLocal和其对应的需要存储的值(this, value)。

问题是:

解释:

既然ThreadLocalMap 是每个线程一个,那么为什么不直接定义到Thread类中呢?反而要定义在ThreadLocal,然后还得交叉引用,这样并可读性非常糟糕,理解起来也不容易,那么设计者的考虑是什么呢?请大神指导!!

我也思考过这个问题,一直没找到相关文章,后来在stackoverflow上看到了一个回复,翻译过来分享一下。

将ThreadLocalMap定义在Thread类内部看起来更符合逻辑,但是ThreadLocalMap并不需要Thread对象来操作,所以定义在Thread类内只会增加一些不必要的开销。定义在ThreadLocal类中的原因是ThreadLocal类负责ThreadLocalMap的创建,仅当线程中设置第一个ThreadLocal时,才为当前线程创建ThreadLocalMap,之后所有其他ThreadLocal变量将使用一个ThreadLocalMap。

总的来说就是,ThreadLocalMap不是必需品,定义在Thread中增加了成本,定义在ThreadLocal中按需创建。

这是本人的理解,如有错误,恳请指正!

源问答地址:

https://ask.csdn.net/questions/730831

相关推荐

继Peepla和GB live之后,又杀出同类直播软件?大尺度令人咂舌
MCE是什么?MCE是如何工作的?
埃弗拉爆猛料:梅西世界杯冠军是“剧本”?法国人竟集体支持!
世界杯经典头球吊射进球回顾:技艺与力量的完美结合,历史瞬间再现
共享单车进驻西安一年 数量突破30万辆_北京时间
论文查重率怎么查?看这份完整检测指南
鳊鱼草鱼鲤鱼鲫鱼哪个好(为什么不建议吃鳊鱼)
神武阵法包括哪些(神武阵法等级高和低有区别吗)
最近网络上很多都在聊自动阅读,今天我们好好说说自动阅读到底怎么样