ThreadLocal源码解析
多线程并发访问临界资源,破坏原子操作,会导致线程安全问题。将公共变量与ThreadLocal进行绑定,线程使用该公共变量时拿到的是在该线程中的副本变量,即将线程中的数据进行了隔离,多个线程能使用该变量但互不影响。 变量值的存放路径为:Thread->ThreadLocalMap->Entry->value,ThreadLocal作为Entry的key,通过key可以拿到value。 ThreadLocalMap的数据结构示意图: 1. 成员变量 内部类ThreadLocalMap 中的Entry[] table 数组(数据结构),table的长度必须是2的n次方,size表示map中entry的个数,threshold表示扩容阈值。阈值通常为2/3*length。 ThreadLocalMap中内部类Entry的value表示线程存储的副本变量值。Entry继承WeakReference,Entry的key是ThreadLocal,是弱引用,在垃圾回收时被回收。 2. 构造方法 无参构造 3. 查找元素 public T get() { //获取当前执行线程 Thread t = Thread.currentThread(); //获取当前线程的成员变量threadLocals ThreadLocalMap map = getMap(t); if (map != null) { /