ThreadLocal本质来说就是一个线程内部存储类,从而让多个线程只操作自己内部的值,从而实现线程数据隔离
每个线程内有一个 ThreadLocalMap 类型的成员变量,用来存储资源对象
ThreadLocalMap特点
- key 的 hash 值统一分配
- 初始容量 16,扩容因子 2/3,扩容容量翻倍
- key 索引冲突后用开放寻址法解决冲突
ThreadLocal基本使用
- set(value) 设置值: 以 ThreadLocal 自己作为 key,资源对象作为 value,放入当前线程的 ThreadLocalMap 集合中
- get() 获取值: 以 ThreadLocal 自己作为 key,到当前线程中查找关联的资源值
- remove() 清除值: 以 ThreadLocal 自己作为 key,移除当前线程关联的资源值
代码案例
public class ThreadLocalTest {
static ThreadLocal<String> threadLocal = new ThreadLocal<>();
public static void main(String[] args) {
new Thread(() -> {
String name = Thread.currentThread().getName();
threadLocal.set("zbbmeta");
print(name);
System.out.println(name + "-after remove : " + threadLocal.get());
}, "t1").start();
new Thread(() -> {
String name = Thread.currentThread().getName();
threadLocal.set("zbbmeta");
print(name);
System.out.println(name + "-after remove : " + threadLocal.get());
}, "t2").start();
}
static void print(String str) {
//打印当前线程中本地内存中本地变量的值
System.out.println(str + " :" + threadLocal.get());
//清除本地内存中的本地变量
threadLocal.remove();
}
}
© 版权声明
本站文章由不念博客原创,未经允许严禁转载!
THE END