ThreadLocal学习(一)

一、什么是ThreadLocal

ThreadLocal,也就是线程本地变量。如果你创建了一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个本地拷贝,多个线程操作这个变量的时候,实际是操作自己本地内存里面的变量(变量的副本),从而起到线程隔离的作用,避免了线程安全问题。
操作:

  • 创建
    创建了一个ThreadLoca变量LOGIN_USER_HOLDER,任何一个线程都能并发访问LOGIN_USER_HOLDER。
private static final ThreadLocal<CaLoginUser>LOGIN_USER_HOLDER=new ThreadLocal<CaLoginUser>();
  • 写入
    线程可以在任何地方使用LOGIN_USER_HOLDER,写入变量。
LOGIN_USER_HOLDER.set(abstractLoginUser);
  • 读取
    线程在任何地方读取的都是它(当前线程)写入的变量。
LOGIN_USER_HOLDER.get();

二、在项目中使用ThreadLocal

在项目中主要用来做用户信息上下文的存储。
登录后的用户每次访问接口,都会在请求头中携带一个token,在控制层可以根据这个token,解析出用户的基本信息。那么问题来了,假如在服务层和持久层都要用到用户信息,比如rpc调用、更新用户获取等等,那应该怎么办呢?
这时候我们就可以用到ThreadLocal,在控制层拦截请求把用户信息存入ThreadLocal,这样我们在任何一个地方,都可以取出ThreadLocal中存的用户数据。

猜你喜欢

转载自blog.csdn.net/m0_51963973/article/details/129964761