1.ThreadLocal概念
ThreadLocal,可以叫做线程本地变量或线程本地存储,顾名思义就是ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。其实就是通过空间换时间的方式来取得对每个线程各自变量的共享。
变量值的共享可以使用 public static 变量的形式,所有的线程都使用同一个被 public static 修饰的变量。ThreadLocal主要解决的就是每个线程绑定自己的值,可以将ThreadLocal类比喻成全 局存放数据的盒子,盒子中可以存储每个线程的私有变量。
2.具体源码分析
-
ThreadLocal有以下方法:
- 方法的具体实现:
- get方法:
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(); }
1.获取当前线程t;2.通过getMap方法获取一个ThreadLocalMap类型的map;3.获取这个键值对,注意这里获取键值对传进去的是 this,而不是当前线程t。
如果获取成功,则返回value值。如果map为空,则调用setInitialValue方法返回value。
-
getMap方法:
-
- get方法: