简单而言就是ThreadLocal为每个Thread提供了一个只属于自己的变量副本,线程针对该变量的修改互不影响。
从实现上来讲,其内部采用类似HashMap的方式来管理线程与变量的关系,但是不是Map,是他的一个内部类ThreadLocalMap,相当于Map的私人订制版,数据结构采用的数组,根据每个线程的hash值与数组的长度来计算线程位置。
使用指南
只要理解了,使用起来还是挺简单的,就4个方法。
- 数据的初始化
protected Integer initialValue()
可以在初始化的时候覆写该方法。
该方法是懒加载的,即只有调用get()使用的时候才判断,如果没有初始化就初始化。
java1.8还提供了静态方法
public static <S> ThreadLocal<S> withInitial(Supplier<? extends S> var0)
- 修改值
void set(Object value)
- 获取值
public Object get()
- 删除值
public void remove()
手动释放对象占用的内存,当然线程结束后也可以交给系统来释放。
网友评论