ThreadLocal-同一个线程共享数据

每一个请求到达服务器,Tomcat都会开启一个线程处理这个请求,从拦截器->controller->service->dao、在到数据返回到客户端都是同一个线程,那么在同一个线程之间,上一层放的数据如拦截器、或者controller,在下一层=数据需要共享,这里就可以使用ThreadLocal;

在这里插入图片描述

ThreadLocal的核心原理就是一个Map<Thread,Object> threadLocal,将每个线程做为key,当前线程需要共享的值就是Object,使用ThreadLocal就能实现跨层数据共享;

代码实现

1.创建SpringBoot项目
2.创建拦截器

/**
* @description: 拦截器
* @author TAO
* @date 2020/8/1 22:30
*/
@Component
public class MyInterceptor implements HandlerInterceptor {

    //线程共享数据对象
    public static ThreadLocal<String> threadLocal = new ThreadLocal<>();

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("请求经过拦截器--准备给threadLocal中添加数据");
            threadLocal.set("yyy");
            return true;
    }
}

3.WebMvcConfigurer添加拦截器

/**
* @description: web核心配置
* @author TAO
* @date 2020/7/30 14:34
*/
@Configuration
public class WebConfig implements WebMvcConfigurer {

    @Resource
    private MyInterceptor myInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myInterceptor).addPathPatterns("/**");// /**myInterceptor要拦截所有请求
    }
}

4.controller编写

  @GetMapping("/getInterceptorData")
    public String getInterceptorData( HttpSession session){
        System.out.println("当前层--controller");
        System.out.println(MyInterceptor.threadLocal.get());
        return "oth1";
    }

5.请求测试
在这里插入图片描述
搞定!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员劝退师-TAO

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值