关于线程绑定变量遇到的问题

问题背景为:

用户登录后台系统后,会根据用户的token查询客户信息,并且将客户信息绑定到线程变量中,方便后续使用。

出现问题:如果访问某些请求时客户未登录,会返回402状态,通过日志监控由于运维加了心跳检测,出现大量未登录的报错,这个本身是正常的,但是诡异的问题是,下面日志中会出现客户的客户编号,正常来讲,用户未登录就不存在token,然后就不可能缓存客户信息,所以这篇博客围绕这个问题进行阐述。

通过猜想可以根据日子打印的线程号来看下相同线程号之前的业务处理逻辑。

通过排查,这个线程号确实之前有做过业务操作

得出结论:系统接收接口请求,是将请求放到线程池中执行的,第一张图之所以有客户号,是因为他复用了上一个请求的线程,之前线程绑定的内部变量没有清除,所以后面重用那个线程时候会出现混乱的情况,

解决方式:当一个请求处理结束后,移除线程的变量。问题解决

线程变量绑定方式:InheritableThreadLocal,优势可以向子线程进行传递

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值