ThreadLocal(线程局部变量)
这个类提供线程局部变量。这些变量不同于正常同行,每一个线程访问一个(通过其 get或 set法)有自己独立的变量,初始化复制。 ThreadLocal实例通常是私有的静态字段在类希望关联状态的线程
通俗的理解:实现单个线程之间共享的变量,每个线程都有自己的ThreadLocal并且不会相互影响,并且可以随着线程的执行而往下传递。
目的
实现单个线程中变量的共享
使用
//声明
ThreadLocal<T> threadlocal = new Threadlocal<T>;
//设置值
threadlocal.set("value");
//获取值
threadlocal.get();
//移除
threadlocal.remove();
工作原理
ThreadLocal功能是掉用Map来实现的,使用ThreadLocal时就相当于使用了一个map,这个map会跟随着线程的执行从开始到结束,当线程执行到哪个地方需要设置或使用ThreadLocal里的数据数就可以使用set和get方法设置和获取。
1.调用set方法时:
首先调用Thread.currentThread方法获取当前线程,然后拿着当线程的实例作为key值取map中寻找相对应的值,再判断拿到的这个值是否为null,如果是null,这存入要存储的值,如果不为null则以当前实例为key找到再map中存储的位置,存入新值。
2.调用get方法时:
同样会先调用Thread.currentThread方法获取当前线程,然后以当前线程的实例作为key值查找到entry的值
提醒:在ThreadLocal中还有一个 initialValue() 方法,在没调用set方法设置值而直接调用get方法获取值时,那获的就是initialValue()方法初始化的值。