ThreadLocal的Key存储的是什么?

这个问题是面试经常被问的问题,其实要搞清楚这个问题,我们首先要好好理解ThreadLocal和Thread以及ThreadLocalMap的关系。

ThreadLocalMap是什么,首先我们用Ide工具找个找到它的位置。搜索发现,它其实是定义在Thread类中。

image-20220516185612535.png

我们接着去寻找使用到它的地方,通过Ide跳转,我们可以发现我们来到了ThreadLocal类的createMap()方法,我们可以发现这个方法其实是新建了一个ThreadLocalMap ,而ThreadLocalMap的key是this,也就是当前ThreadLocal对象。接着,让我们来找一找什么时候用到了createMap()方法


image-20220516190945013.png

通过查找,我们可以发现在setInitialValue()和set()两个方法中对createMap进行了调用。通过阅读源码以及我们平时的使用,可以很容易的发现,这两个方法其实就是我们初始化ThreadLocal内容时使用的方法


image-20220516191616025.png

经过以上简单的跟踪源码,我们可以得出结论,每一个线程包括了一个ThreadLocalMap,而ThreadLocalMap存储了我们创建的多个ThreadLocal,每一个ThreadLocalMap值的key就是当前的ThreadLocal。所以ThreadLocal其实是没有Key的,这里的key指的的是ThreadLocalMap的key,也就是当前的ThreadLocal。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容