ThreadLocal类
- 什么是ThreadLocal
- 为什么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的一个私有副本,所以线程之间的数据是隔离的,因此是线程安全的。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)