ThreadLocal:本地线程变量,通过 set() 和 get() 方法来维护局部变量。不同线程之间局部变量彼此隔离,互不影响.
每个 Thread 维护着一个 ThreadLocalMap 的引用。
ThreadLocalMap 是 ThreadLocal 的内部类,用 Entry 来进行存储。
调用 ThreadLocal 的 set() 方法时,实际上就是往 ThreadLocalMap 设置值,key 是ThreadLocal 对象,值是传递进来的对象。
调用 ThreadLocal 的 get() 方法时,实际上就是往 ThreadLocalMap 获取值,key是 ThreadLocal 对象。
ThreadLocal 本身并不存储值,它只是作为一个 key 来让 Thread 从 ThreadLocalMap 获取 value.
InheritableThreadLocal: 与ThreadLocal相同,惟一的区别就是实现父子线程共享本地变量。
解释:主线程中创建InheritableThreadLocal对象,并使用set方法保存值,然后开辟一个子线程,子线程中依旧能够获取到InheritableThreadLocal对象保存的值。
使用ThreadLocal,子线程无法感知到父线程中保存的值。
使用InheritableThreadLocal子线程能感受到父线程中保存的值。