在WEB环境中使用ThreadLocal注意事项

     具体的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 一定要注意这一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值