ThreadLocal 作用是提供线程内的局部变量
使用
ThreadLocal<Integer> local=new ThreadLocal();
local.set(100);
local.set(900);
int loc=local.get();
System.out.println(loc);
输出900
每一个ThreadLocal里面都是一个键值对ThreadLocalMap ThreadLocal是一个自定义哈希键值对 仅用于维护线程本地变量值 ThreadLocalMap里面和HashMap一样有一个Entry节点 Entry的key为ThreadLocal(当前线程的ThreadLocal对象) value为ThreadLocal对应的值 每一个线程都有一个ThreadLocalMap类型的ThreadLocals变量
当我们通过threadLocal.set(100) 我们就会在这个线程中的threadLocals属性中放入一个人键值对 get方法的时候
首先会根据这个线程得到线程的threadLocals属性 再根据ThreadLocal拿到值 通过key.hashCode&(table.length-1) 的运算式计算 下一个索引位置 直到找到目标键值对或者为空 为空 空指针错误
hash冲突 在ThreadLocalMap中 相同索引 下一索引的位置 (i+1<len)?i+1:0
10万+

被折叠的 条评论
为什么被折叠?



