zoukankan      html  css  js  c++  java
  • 线程变量ThreadLocal的使用

    我们有时候会通过token进行多次查询(猪:token是redis中的key),比如:

    一次是在登录拦截器中,一次是在controller的业务中查询,这样存在性能和资源的浪费问题!!!

    那么如何将拦截器中的数据传递到Controller中呢?

    有两种方案:

        1,将User对象放置到request对象中

        2,使用ThreadLocal线程变量实现(在进入tomcat和产生响应前,对象都处于同一个线程中)

    实现:

    1,定义一个ThreadLocal相关的类


    public class UserThreadLocal {
    private static ThreadLocal<User> USER_LOCAL = new ThreadLocal<>();

      //对外提供set和get方法
      public static void setUser(User user){
        USER_LOCAL.set(user);
      }
      public static User getUser(){
        return USER_LOCAL.get();
      }
    }

    2,在登陆拦截器中将User对象放置到ThreadLocal中

      //查询到用户,将用户放入到ThreadLocal中
      UserThreadLocal.setUser(user);

    3,在Service中可以通过ThreadLocal获取User  

      //从ThreadLocal线程变量中获取User对象
      User user = UserThreadLocal.getUser();

  • 相关阅读:
    python归并排序
    初学者迭代python
    大数相乘
    基本蚁群算法
    MATLAB绘图,绘双坐标轴,绘一图二轴等
    为什么说TCP协议是可靠的
    TCP协议-报文段数据中的自定义包头
    net start npf启用失败
    富时A50中国指数学习笔记
    ProtoBuffer学习总结
  • 原文地址:https://www.cnblogs.com/lizhaowen/p/5934208.html
Copyright © 2011-2022 走看看