赞
踩
线程变量是存在于当前线程里的变量,在线程执行的某一时间放入线程变量,该变量会随着线程销毁而自行销毁。
应用场景可以是处理一条消息队列,也可以是处理一个http请求
下边来看实例
我在拦截器里放入这样一行代码,该请求在经过拦截器时,将用户信息存放到线程变量中
然后我在下边直接引用,那么我的createBy 字段就是登陆人的昵称,因为我在接收某个用户的请求时,已经将用户信息放入线程变量了,那么直到我这个请求结束之前,我从任何地方取出的,就是当前线程的登陆人。
下边附上源码
- package com.example.pidog.threadLocal;
-
-
- import com.example.pidog.domain.User;
-
- public class UserThreadLocal {
- /**
- * 构造函数私有
- */
- private UserThreadLocal() {
- }
-
- private static final ThreadLocal<User> USER_INFO_THREAD_LOCAL =
- new ThreadLocal<>();
-
- /**
- * 清除用户信息
- */
- public static void clear() {
- USER_INFO_THREAD_LOCAL.remove();
- }
-
- /**
- * 存储用户信息
- */
- public static void set(User user) {
- USER_INFO_THREAD_LOCAL.set(user);
- }
-
- /**
- * 获取当前用户信息
- */
- public static User getCurrentUser() {
- return USER_INFO_THREAD_LOCAL.get();
- }
-
- public static Long getCurrentUserId(){
- return USER_INFO_THREAD_LOCAL.get().getUserId();
- }
- }
调用的时候直接静态调用就可以了
UserThreadLocal.set(user)//在线程中存入用户
UserThreadLocal.getCurrentUser()//获取当前用户
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。