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的数据隔离

 记录一下ThrealLocal_数据