1、作用
线程并发 传递数据 线程隔离
2、与sychnoized的区别
3、如何设计的
每个map存储的entry数量变少
当thread销毁的时候,threadlocalmap随之销毁,减少内存的使用
key是个弱引用,将threadlocal对象的生命周期和线程生命周期解绑
由于threadlocalmap的生命周期和thread一样长,如果没有手动删除对应key就会导致内存泄漏
4、对应代码
public class b {
// 创建一个 ThreadLocal 变量,每个线程都会有独立的 Integer 副本
private static ThreadLocal<Integer> threadLocal = ThreadLocal.withInitial(() -> 0);
public static void main(String[] args) {
// 创建两个线程,每个线程都会访问 ThreadLocal 变量
Thread thread1 = new Thread(new Task(), "Thread-1");
Thread thread2 = new Thread(new Task(), "Thread-2");
thread1.start();
thread2.start();
}
static class Task implements Runnable {
@Override
public void run() {
for (int i = 0; i < 5; i++) {
// 获取当前线程的 ThreadLocal 变量值
int currentValue = threadLocal.get();
// 修改 ThreadLocal 变量值
threadLocal.set(currentValue + 1);
// 输出当前线程名和 ThreadLocal 变量值
System.out.println(Thread.currentThread().getName() + " - ThreadLocal value: " + threadLocal.get());
try {
// 模拟一些处理时间
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}