threadLocal存取session

920 阅读1分钟

InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递。

  • 把session存threadLocal的好处

这么说吧,你在业务层多出地方都用到Session信息,那你直接各种request 去取,还是我直接get就拿到好呢?

threadLocal 使得代码耦合度更低,且实现更优雅。

  • 上代码

    public class UserUtils { private static ThreadLocal sli = new ThreadLocal();

    // 将session保存到ThreadLocal中失败,后续在继续进行。(为空时就再存)
    protected static void setLoginInfo(Object info) {
    	if (sli.get() != null) {
    		// throw new RuntimeException("login Info allready exists in Context");
    	} else {
    		sli.set(info);
    	}
    }
    
    protected static void clearLoginInfo() {
    	sli.remove();
    }
    
    public static Object getLoginInfo() {
    	Object info = sli.get();
    	System.out.println("当前线程:" + Thread.currentThread().getName() + "--" + (info == null));
    	return info;
    }
    

    }

  • 调用的时候

    	UcLoginUserInfo info = (UcLoginUserInfo) UserUtils.getLoginInfo();