1. Thread.java
我们首先打开Thread.java源码,看到里面有一个ThreadLocalMap类型的变量threadLocals
2. ThreadLocal.java -> getMap(thread t)
然后ThreadLocal.java里面有一个getMap函数,传入的是线程,返回的是线程里面的ThreadLocalMap
3. ThreadLocal.java -> set(T value)
最后看到Thread.java源码里的set函数,其实就是找到当前线程的ThreadLocalMap,然后往里面传入key为ThreadLocal,value为资源对象的Entry
one more thing: 这个泛型T是初始化ThreadLocal时要传入的类型,T表示资源对象的类型。
所以ThreadLocal,ThreadLocalMap,Thread的关系是这样:
每个Thread里面都有一个类型为ThreadLocalMap的变量,这个ThreadLocalMap类型的变量其实就是个哈希表,这个哈希表里面的每个Entry的key为ThreadLocal,value为资源对象。