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();

  • 相关阅读:
    Js Array 删除
    语音播报功能
    js实现HashTable
    Js 克隆
    获取电脑名和IP地址
    获取电脑名和Ip
    IIS 配置问题
    WCF 服务
    【并查集】wikioi1001舒适的路线
    【实用】读取信息
  • 原文地址:https://www.cnblogs.com/lizhaowen/p/5934208.html
Copyright © 2011-2022 走看看