我理解的ThreadLocal很简单,他是一个和线程绑定的独立的空间,使用方式就是类似于MAP
它的存储作用于是当前线程。随着线程的销毁而销毁,所以要注意的一点就是。
如果在线程池里使用了ThreadLocal来存放自己的数据,记得要清除一下ThreadLocal
他可以用于下面场景
当我有一个参数会在相同线程里的多重对象引用里使用。
比如我有一参数 ,这个参数是当前线程里需要全局的。比如订单号 out_trade_no。
我现在有封装了几个方法,方法之间有相互调用关系。a.aMethod(){
b.bMethod();
}
b.bMethod(){
c.cMethod();
}
c.cMethod(){
//对订单 out_trade_no 进行插入操作
}
如过 a 从request里获取到了 out_trade_no ,中间需要传给b.bMethod,再有b.bMethod 传给 c.cMethod。
一般来说我们是需要在参数里传值的。 但是如果你这代码牵扯太大了,改方法的一个参数,就需要改很多类的方法。
那我们就可以使用TheadLocal进行参数传值。
如果你拜读过Spring的事务源码,你会发现他的事务上下文也是基于ThreadLocal的