ThreadLocal

1.构造方法


无参构造方法

2.公有方法


get()方法



get()源码

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

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


initialValue()方法


initialValue()源码

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

set()方法


set()源码

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

remove()方法


remove()源码

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


JDK8新增方法

withInitial()方法



withInitial()方法

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容