ThreadLocal类用来提供线程内部的局部变量。这种变量在多线程环境下访问(通过get和set方法访问)时能保证各个线程的变量相对独立于其他线程内的变量。ThreadLocal实例通常来说都是private static类型的,用于关联线程和线程上下文。
具体有三个特性:
1、线程安全: 在多线程并发的场景下保证线程安全
2、传递数据: 我们可以通过ThreadLocal在同一线程,不同组件中传递公共变量
3、线程隔离: 每个线程的变量都是独立的,不会互相影响
ThreadLocal结构:
每个Thread维护一个ThreadLocalMap,这个Map的key是ThreadLocal实例本身,value才是真正要存储的值Object。具体的过程是这样的:
1、每个Thread线程内部都有一个Map (ThreadLocalMap)
2、Map里面存储ThreadLocal对象(key)和线程的变量副本(value)
3、Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向map获取和设置线程的变量值
4、对于不同的线程,每次获取副本值时,别的线程并不能获取到当前线程的副本值,形成了副本的隔离,互不干扰。