前言
记录一下在测试过程中,遇到的一个有关ThreadLocal的问题,顺便学习一下ThreadLocal相关的知识。
ThreadLocal介绍
ThreadLocal是一个关于创建线程局部变量的类。
要点:
* 在当前线程中,任何一个地方都可以访问到ThreadLocal的值。
* 当前线程保存在ThreadLocal中的值只能被当前线程访问,一般情况下其他线程访问不到。
* ThreadLocal内部存储数据是以ThreadLocalMap(类似Map的key-value存储方式)来存储的,以当前线程为key,以需要存储的数据为value
问题场景
最近项目需要上线一个大版本,此次版本对前端APP新、老版本发起的请求做了不同的加密处理,经过讨论,需要在后台做版本兼容。
兼容的流程:
- APP端在请求头里面新增一个字段作为新版本APP的标识,如:varA:123
后端在SpringDispatcherServlet中判断varA是否为空,若不为空则把它放入ThreadLocal变量中
if (StringUtil.isNotEmpty(varA)){ ThreadContext.put(ThreadContext