1. thread,threadlocal,threadlocalmap关系图
- threadlocalmap相当于普通的map,以entry[key-value]数组的形式存储数据
- threadlocalmap为threadlocal的内部类
- thread中存在属性threadlocal.threadlocalmap,所以不同线程取到的threadlocalmap不同
- 用户对threadlocal的get及set操作,实际是对thread中属性threadlocalmap的操作,所以不同线程的get及set方法操作的对象不同
- threadlocalmap保存数据以threadlocal实例为key,所以不同threadlocal即使在同一线程中调用get及set方法,操作的数据也不同
- threadlocal只是将数据保存到不同的线程对象上,不同线程之间的数据存储了多份,但是如果保存的是对象类型数据,仍然是一个对象,修改对象属性时仍然会统一修改
总结:
- 一个Thread存在一个threadlocal.threadlocalmap变量,threadlocalmap中的key为threadlocal实例,value为欲保存的值
- Threadlocal中存在get和set方法
- set:以threadlocal实例为key,将要保存的值保存到threadlocalmap中
- get:以threadlocal实例为key,获取threadlocalmap中的值