ThreadLocal
使用ThreadLocal<T> 修饰的成员变量,在每个线程使用时,会为每个线程存储独有的一份数据。使用时用get方法获取。可以理解为每个线程为Key的一个Map,但ThreadLocal类中维护的并不是一个Map,只是这么理解。
public class ThreadLocalTest {
private ThreadLocal<String> value = new ThreadLocal<>();
public static void main(String[] args) throws InterruptedException {
ThreadLocalTest t = new ThreadLocalTest();
t.value.set("main线程的value");
new Thread(() -> {
System.out.println("内部线程" + t.value.get());
t.value.set("内部线程的value");
System.out.println("内部线程" + t.value.get());
}).start();
Thread.sleep(1000);
System.out.println(t.value.get());
}
}
输出
内部线程null
内部线程内部线程的value
main线程的value
栈封闭
虚拟机栈是每个线程独有的空间,此空间中的变量称为局部变量,是线程独有的,其他线程无法访问。