线程变量ThreadLocal的使用
2016-10-06 17:50
204 查看
我们有时候会通过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();
一次是在登录拦截器中,一次是在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();
相关文章推荐
- 并发编程实战 1.8. 线程中变量的使用 - ThreadLocal
- (三) Java多线程详解之线程范围内共享变量及ThreadLocal类使用
- 线程范围内共享变量使用ThreadLocal类详细方法
- ThreadLocal的使用,保证每一个线程都有自己的共享变量。
- Java代码质量改进之:使用ThreadLocal维护线程内部变量
- 使用JDK提供的ThreadLocal实现线程范围的共享变量(类似于Map<Thread,Variable>)
- 线程不安全的类不要轻易做为static变量使用,及如何使用ThreadLocal将共享变量变为独享变量
- java学习——ThreadLocal 线程局部 (thread-local) 变量的使用
- ThreadLocal的使用,保证每一个线程都有自己的共享变量。
- 线程内部共享变量(ThreadLocal类使用初步)
- 线程变量(ThreadLocal)的使用和测试
- android 线程范围内共享变量以及ThreadLocal的使用
- 线程变量浅析ThreadLocal
- 线程级变量的理解和使用-ThreadLocal
- 黑马程序员——使用ThreadLocal简便多变量同步
- 【ThreadLocal模式】线程上的全局变量
- 线程变量安全化ThreadLocal(3)
- 【线程高新】——【ThreadLocal实现线程范围的共享变量】
- VC++基础 使用全局变量控制线程运行
- 使用内部线程维护变量持久更新