InheritableThreadLocal主要用于子线程创建时,需要自动继承父线程的ThreadLocal变量,方便必要信息的进一步传递。
- 把session存threadLocal的好处
这么说吧,你在业务层多出地方都用到Session信息,那你直接各种request 去取,还是我直接get就拿到好呢?
threadLocal 使得代码耦合度更低,且实现更优雅。
上代码
public class UserUtils { private static 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();