具体的ThreadLocal的原理,这里就不在累赘了,网上很多这样的文章。主要是讲下在WEB环境中,使用ThreadLocal要特别主意的问题。
ThreadLocal 其中的一个用处是 在同一个线程间共享变量,在不同的线程间隔离。
private final static ThreadLocal<Map<String,ImportMapping>> areaSession = new ThreadLocal<Map<String,ImportMapping>>();
protected ImportMapping findAreaMapping(List<ImportMapping> areaList,
String val,
String corpId) {
Map<String,ImportMapping> mappingMap = areaSession.get();
if (mappingMap == null) {
mappingMap = new HashMap<String, ImportMapping>();
...............
areaSession.set(mappingMap);
}
return mappingMap.get(corpId + KEY_SPLIT + val);
}
有很多地方会调用 findAreaMapping 这个方法,这边用到 ThreadLocal 的目的是,当执行完一次findAreaMapping取数据之后,就直接从
ThreadLocal中取。在业务上 findAreaMapping里面取出来的数据是不一样的。但是由于在WEB环境中,WEB容器
是会维护一组线程池的。也就是两次不同的请求,有可能被分配到了同一个线程。这样会造成第二次不同的请求里面,取到了第一次请求里面塞入的变量值。
在WEB环境中使用 ThreadLocal 一定要注意这一点。
分享到:
相关推荐
NULL 博文链接:https://bijian1013.iteye.com/blog/2380233
javaee开发常见的模式有MVC模式,在C层中常常会再次分层,如:servlet(web层)、service(业务逻辑层)、dao(数据访问层),其中service和dao最容易混在一起,如转钱交易场景,service层需要执行“事务”操作,会...
Java中ThreadLocal的设计与使用.doc
运行在tomcat容器中的ThreadLocal容易产生的问题ThreadLocal在tomcat容器中的的生命周期并不等于web request的生命周期,所以(以下讨论的是tomcat容器中使用ThreadLocal),所以ThreadLocal不应保存与请求会影响的...
详解java底层实现原理,ThreadLocal底层实现的数据结构,为什么不会导致内存泄露
NULL 博文链接:https://justsee.iteye.com/blog/791919
ThreadLocal原理及在多层架构中的应用
ThreadLocal入门教程。 讲解了线程安全和ThreadLocal的使用的基本知识。
ThreadLocal的基本原理,核心机制,源码,ThreadLocal在分布式架构中的应用,ThreadLocal在基础架构,开源中间件,使用非常广泛,建议掌握。
主要介绍ThreadLocal的原理,实例分析以及注意事项
ThreadLocal
在我们日常 Web 开发中难免遇到需要把一个参数层层的传递到最内层,然后中间层根本不需要使用这个参数,或者是仅仅在特定的工具类中使用,这样我们完全没有必要在每一个方法里面都传递这样一个 通用的参数。...
ThreadLocal应用示例及理解,这个写了相关的示例,可以参考一下。
使用c3p0数据源,进行转账操作的小型简单练习;使用ThreadLocal控制事务中的connection唯一,实现mvc三层结构互不干扰。
NULL 博文链接:https://yizhenn.iteye.com/blog/2293339
理解ThreadLocal 理解ThreadLocal 理解ThreadLocal 理解ThreadLocal
ThreadLocal的几种误区ThreadLocal的几种误区ThreadLocal的几种误区
通向架构师的道路(第七天)之漫谈使用ThreadLocal改进你的层次的划分
NULL 博文链接:https://xuranpaoche.iteye.com/blog/1514071