ThreadLocal源码解读
基本参数
|
|
构造函数
- 无参构造函数
|
|
get方法
|
|
getMap返回一个ThreadLocalMap类型的值
|
|
实际上第一次调用,map为空,调用setInitialValue()方法来初始化map
|
|
createMap方法实际上完成ThreadLcoalMap的初始化,每个Thread都有一个ThreadLocal.ThreadLocalMap。其中key为ThreadLocal这个实例,value为每次initialValue()得到的变量。
|
|
第二次调用get方法,会进入if里面,调用getEntry方法获取数据
|
|
set方法
|
|
remove方法
|
|
总结
- 每个线程都有自己的局部变量,一个线程的本地变量对于其他线程是不可见的
- 独立于变量的初始化副本,ThreadLocal可以给一个初始值,而每个线程都会获得到这个初始化值的一个副本,这样能保证不同的线程都有一份拷贝
- 状态与某一个线程相关联,ThreadLocal不是用于解决共享变量的问题的,不是为了协调线程同步而存在的,而是为了方便每个线程处理自己的状态而引入的一个机制。
ThreadLocal实例
- 格式化时间
|
|
- Gc演示
|
|