我们创建的变量通常是不安全的(可能被多个线程同时修改),也就是说,这个变量是共享变量
而使用ThreadLocal创建的变量只能被当前线程访问,其他线程无法访问和修改
ThreadLocal不是一个Thread,我们用ThreadLocal为每个线程提供一份存储空间,这个存储空间里的数据只属于当前线程,别的线程无法访问当前线程的数据
创建一个ThreadLocal类的对象,由于ThreadLocal是一个泛型类,所需需要指定这个对象的类型。这里指定这个对象的类型为整数类型
ThreadLocal<Integer> localInt = new ThreadLocal<>();
接下来为这个对象设置值,和获取这个对象的值:
localInt.set(8);
localInt.get();
实际开发中遇到的场景:
public class BaseContext
{
private static ThreadLocal<Long> threadLocal=new ThreadLocal<>();
public static void setCurrentId(Long id)
{
threadLocal.set(id);
}
public static Long getCurrentId()
{
return threadLocal.get();
}
}
Long empId=(Long)request.getSession().getAttribute("employee");
BaseContext.setCurrentId(empId);
metaObject.setValue("updateUser",BaseContext.getCurrentId());