ThreadLocal ---> 当调用set(Object value)方法时,
1. 获取当前线程的ThreadLocalMap【用的子类Entry,可以直接理解为就是一个Map】 (key: Threadlocal(当前threadlcoal对象); value: Object(要设置的值))
[为什么是map ,因为一个线程里面可能有多个threadlocal, 但一个线程只会有一个ThreadlLocalMap];
2. 当ThreadLocalMap 为null,则为当前线程创建一个ThreadLocalMap; 否则从当前线程的ThreadLocalMap中 找到Key为当前 ThreadLocal的Entry, 将其Value设为Object;
ThreadLocal ---> 当调用get()方法时,
1. 原理同上;
总结: 每个线程都有一个独立的ThreadLocalMap属性, 这样就做到了每个线程之间数据的隔离; 同时ThreadlLocalMap通过Map(多个Entry,一个ThreadLocal和Value对应一个Entry)格式实现了同一个线程中不同Threalocal的数据隔离