ThreadLocal原理(基础款)
ThreadLocal它提供了线程局部变量的功能。它的原理可以简单概括为以下几点:
- 每个Thread对象都维护了一个以ThreadLocal为键、任意类型对象为值的Map。这个Map存储了每个线程对应的局部变量值,这个Map叫做ThreadLocalMap。
- 当通过ThreadLocal对象调用set()方法设置变量值时,实际上是获取当前线程的ThreadLocalMap将当前ThreadLocal对象作为键,变量值作为值,存储到Map中。
scss复制代码 public void set(T value) {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
map.set(this, value);
} else {
createMap(t, value);
}
}
3. 当通过ThreadLocal对象调用get()方法获取变量值时,实际上是获取当前线程的ThreadLocalMap,再以以当前的ThreadLocal对象为键获取对应的值。
ini复制代码public T get() {
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
ThreadLocalMap.Entry e = map.getEntry(this);
if (e != null) {
@SuppressWarnings(