当使用ThreadLocal对象维护一个变量时,ThreadLocal对象为每个使用该变量的线程提供独立的副本,所以线程可以独立的改变自己的副本,而不会影响其他线程的变量副本。
从线程的角度看,目标变量就像是各个线程的本地变量(线程私有),这也是类名中Local的含义。
ThreadLocal源码1 ThreadLocal源码2 ThreadLocal源码3ThreadLocal的实现:
(1)ThreadLocal对象并不存储值,值存储在Thread对象的threadLocalMap属性中。
threadLocalMap 存储了key位ThreadLocal,value为。
(2)ThreadLocal 的 get()方法:首先通过getMap(Thread t)方法获得当前线程的threadLocalMap对象,然后根据key(key 为当前threadLocal对象,即this),从而获得value。
(3)setInitialValue()方法中的initialValue()方法是一个protected方法,在new 一个ThreadLocal对象时可以重写该方法。
网友评论