过程:
- 获取当前线程获取当前线程属性ThreadLocalMap判断当前线程属性ThreadLocalMap是否为null如果不为空,则直接设置值如果为空,则创建ThreadLocalMap
调用ThreadLocalMap的有参构建器
- 创建table,也就是给Entry[]赋值。其中,INITIAL_CAPACITY是16通过hashcode&(INITIAL_CAPACITY-1)按位于给这个table[i]赋值。指定大小为1,但是长度是16设置扩容阈值(为容量的三分之二大小)
扩容阈值源码:
private void setThreshold(int len) {
threshold = len * 2 / 3;
}
Entry创建
- 代码执行红框中的构建函数先调用父类的构建器然后给Object value赋值即可
点击super(k)
创建一个引用给定对象的弱引用
点击super(referent)
因此,我们可以看出entry中的key是弱引用,所以ThreadLocalMap的key是弱引用的。



