ThreadLocal

1.构造方法


ThreadLocal_第1张图片
无参构造方法

2.公有方法


ThreadLocal_第2张图片
get()方法


ThreadLocal_第3张图片


ThreadLocal_第4张图片
get()源码

        当线程初次调用set()或get()方法时,当前线程并没有其特有的ThreadLocalMap,因而会调用creatMap( t , value )为当前线程创建一个HashMap,该HashMap以其HashCode与当前线程进行绑定。并以ThreadLocal为键,value对象为值,其键值对采用WeakRefference(弱引用)。当前线程结束后,且无其它强引用指向该value值,GC会将value对象进行标记,然后回收。

        因此,当用ThreadLocal进行对诸如Connection,Session需要关闭以释放资源的对象管理时,将不需要手动关闭。因为在线程结束时,该对象会被自动回收。


initialValue()方法


ThreadLocal_第5张图片
initialValue()源码

initialValue()可用于对ThreadLocal进行初始的赋值。可以创建类继承ThreadLocal类,并重写initialValue()即可对其进行初始赋值。

ThreadLocal_第6张图片
set()方法


ThreadLocal_第7张图片
set()源码

set()方法将该参数存入到当前线程的ThreadLocalMap中,若该HashMap不存在则创建并进行赋值。

remove()方法


ThreadLocal_第8张图片
remove()源码

remove()方法会调用clear()方法,清除当前线程的ThreadLocalMap的键值对的键与值之间的引用,由于该键值对的键与值之间是弱引用,因而该value值对象会被回收。


JDK8新增方法

withInitial()方法



ThreadLocal_第9张图片
withInitial()方法

该方法用于给ThreadLocal赋初始值,类似initialValue()方法,不过有了这个方法之后就不再需要创建类继承ThreadLocal然后重写initialValue()方法。直接调用withInitialValue()方法,并用匿名内部类的形式传入withInitialvalue()中,重写initialvalue()方法即可。

你可能感兴趣的:(ThreadLocal)