ThreadLocal类
什么是ThreadLocal
ThreadLocal可以简单的理解为他其实就是一个工具类,
用来存储线程局部变量的一个工具类,存储的变量是线程安全的,其他线程无法访问到的;
用例:
private static final ThreadLocal threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
ExecutorService executorService = Executors.newFixedThreadPool(1);
executorService.submit(() -> {
threadLocal.set("test");
getString();
});
System.out.println(threadLocal.get());
}
private static void getString(){
System.out.println(threadLocal.get());
}
null
test
ThreadLocal存储的变量只在当前线程下可以获取到,其他线程是获取不到的,存储的变量是线程安全的
为什么ThreadLocal是线程安全的呢?
ThreadLocal就是相当于桥梁工具类,他本身并不存储值,它是依赖Thread类中的ThreadLocalMap来实现存储的当调用set(T value)时,ThreadLocal将自身作为Key,值作为Value存储到Thread类中的ThreadLocalMap中这就相当于所有线程读写的都是自身Thred的一个私有副本,所以线程之间的数据是隔离的,因此是线程安全的。