ThreadLocal 是什么?
在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。
ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。
在JDK5.0中,ThreadLocal已经支持泛型,该类的类名已经变为ThreadLocal
源码分析
结构
- Thread类中有个- ThreadLocal.ThreadLocalMap threadLocals = null;变量。
- ThreadLocal.ThreadLocalMap有个- ThreadLocal.ThreadLocalMap.Entry数组
- ThreadLocal.ThreadLocalMap.Entry键是ThreadLocal 值是value- 代码
- 读取ThreadLocal的值, - 先拿到当前thread的map
- 从map中查找当前threadlocal的值
- 找不到就初始化,然后返回- public T get() {
- Thread t = Thread.currentThread();
- ThreadLocalMap map = getMap(t);
- if (map != null) {
- ThreadLocalMap.Entry e = map.getEntry(this);
- if (e != null) {
- @SuppressWarnings("unchecked")
- T result = (T)e.value;
- return result;
- }
- }
- return setInitialValue();
- }
 
 
- 设置ThreadLocal - public void set(T value) {
- Thread t = Thread.currentThread();
- ThreadLocalMap map = getMap(t);
- if (map != null)
- map.set(this, value);
- else
- createMap(t, value);
- }
 
 
                         
                                

