读码农翻身之用来维护本线程变量的ThreadLocal
1、为什么需要ThreadLocal?
来看这样一个实例,在某个类中,创建了一个Context的对象,其中设置了一个trackerID,然后再调用了其他的java类,然后最终需要使用到ctx的这个tranckerID要怎么办?
有人想,直接把Context对象一层层传递下去,这样到时候就可以用到了
但是这样的缺点,就是太麻烦,有时候改动会很大。此时又有人认为可以把set/get TrackerID的方法修改为static静态方法。
但是这样多线程并发的时候有可能出问题。(因为线程1调用了set,然后线程2又调用了set,数据会相互覆盖。)-----------话说能不能set方法是私有的,然后get方法是静态的?
2、解决方案:
面对上面的问题,能否把这个值放到线程中?让线程携带这个值到处跑,这样无论在任何地方都可以轻松获取到?这个就是ThreadLocal
3、如何使用?
保存数据:
取出数据: