threadLocal
ThreadLocal 类为线程本地变量,用于存储变量:会和线程绑定,每个线程都有自己的ThreadLocal 重要方法: public T get() { } public void set(T value) { } public void remove() { } protected T initialValue() { } 使用方法: 创建一个ThreadLocal对象,一个线程中可以有多个ThreadLocal对象: ThreadLocal<Long> longthreadLocal=new ThreadLocal<Long>(); //泛型指定这个线程本地变量存储值得类型 ThreadLocal<String> stringthreadLocal=new ThreadLocal<String>(); Set()方法: 调用set方法存值: longthreadLocal.set(100L); //会获取到当前线程中的threadLocals,然后调用threadLocals的set方法设置值:key为longthreadLocal对象,value为100L 执行流程:在每个线程Thread中都存在一个threadLocals的成员变量,用于存储当前线程本地变量(可以有多个,如longthreadLocal,stringthreadLocal)。 threadLocals为一个Map(ThreadLocalMap).这个map的key为threadLocal,值为threadLocal对应要保存的值 调用set()时,会获取到当前线程中的threadLocals,然后调用它的set方法向这个map中保存值,key为threadLocal本身,值为需要保存的值 get()方法: 调用get方法取值: Long long1 = longthreadLocal.get(); //会获取到当前线程中的threadLocals,然后调用threadLocals的getEntry方法获取到键值对:key为longthreadLocal对象,value为100L。获取到值100L 执行流程:调用get()时,也会获取到当前线程中的threadLocals,然后调用它的getEntry方法获取到与这个threadlocal对应的键值对:key为longthreadLocal对象,value为100L。获取到值100L remove()方法:清除当前本地变量保存的值:获取到当前线程中的threadLocals,删除当前ThreadLocal的键值对。调用完这个方法再调用get()方法,返回值为null. initialValue():初始化方法,底层通过这个方法设置线程本地变量默认值为null。在底层,调用get方法时,如果根据ThreadLocal对象找不到值,会返回这个默认值null。也可以重写这个方法,自己设置返回的默认值
示例代码: public class ThreadLocalTest { public static void main(String[] args) { ThreadLocal<Long> longthreadLocal=new ThreadLocal<Long>(); longthreadLocal.set(100L); Long long1 = longthreadLocal.get(); longthreadLocal.remove(); Long long2 = longthreadLocal.get(); System.out.println(long1); System.out.println(long2); }
运行结果: 100 null
https://www.cnblogs.com/dolphin0520/p/3920407.html