1ThreadLocal案例引入
为共享变量在每个线程中创建一个副本,每个线程可以访问自己内部的副本变量。
2ThreadLocal实现原理
原理:线程局部变量是局限于线程内部的变量,属于线程自身所有,不在多个线程间共享。Java提供ThreadLocal类来支持 线程局部变量,是一种实现线程安全的方式。
线程局部变量 : 为共享变量在每个线程中创建一个副本,每个线程可以访问自己内部的副本变量【线程局部变量】。
每个Thread维护一个ThreadLocalMap,这个Map的Key是ThreadLocal实例本身,value才是真正要存存储的值object。
- 每个Thread线程内部都有一个Map(ThreadLocalMap)
- Map里存储Entry【ThreadLocal对象(Key)和线程的变量副本(value)】
- Thread内部的Map是由ThreadLocal维护的,由ThreadLocal负责向Map获取和设置线程的变量值。
- 对于不同的线程,每次获取副本时,别的线程并不能获取到当前线程的副本值,形成了副本的隔离,互不干扰。