1. thread,threadlocal,threadlocalmap关系图

threadlocal

  • 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中的值