对象释放

JAVA ThreadLocal对象浅析

亡梦爱人 提交于 2021-01-21 22:22:45
最近在开发过程中,在做一个字典项服务的时候,最开始采用了ThreadLocal对象来缓存数据。在使用ThreadLocal过程中遇到一些问题,这里和大家分享一下。 一、 什么是 ThreadLocal ? 顾名思义它是local variable(线程局部变量)。它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本。从线程的角度看,就好像每一个线程都完全拥有该变量。 它主要由四个方法组成initialValue(),get(),set(T),remove(),其中initialValue()方法是一个protected的方法,只有在重写ThreadLocal的时候有用。 void set(T t):为调用该方法的线程存入一个本线程变量。 T get(): 返回本线程存入ThreadLocal中的值,没有返回空。 void remove(): 移除本线程存入ThreadLocal中的值。 T initialValue():用于在为null时,生成一个初始值,ThreadLocal直接返回一个null值。 二、 ThreadLocal 的原理 在查看了java源码后发现,ThreadLocal通过使用ThreadLocalMap(注:这里的Map非java.util.Map子类)实例来存储”线程局部变量”,当第一次设值的时候,如果map为空,则创建一个map并set入值