谈谈对 ThreadLocal 的理解?

1、Java 的 Web 项目大部分都是基于 Tomcat。每次访问都是一个新的线程,每一个线程都独享一个 ThreadLocal,我们可以在接收请求的时候 set 特定内容,在需要的时候 get 这个值。

2、 ThreadLocal 提供 get 和 set 方法,为每一个使用这个变量的线程都保存有一份独立的副本。

public T get() {...}
public void set(T value) {...}
public void remove() {...}
protected T initialValue() {...}

1、get() 方法是用来获取 ThreadLocal 在当前线程中保存的变量副本;

2、set() 用来设置当前线程中变量的副本;

3、 remove() 用来移除当前线程中变量的副本;

4、 initialValue() 是一个 protected 方法,一般是用来在使用时进行重写的,如果在没有 set 的时候就调用 get,会调用 initialValue 方法初始化内容。

发表评论

后才能评论

评论(2)

  • 一蓑烟雨 普通 2022-09-29 9:52 上午

    看这个:
    ThreadLocal,顾名思义,线程本地变量,只属于当前线程,其他线程无法获取这个变量,是隔离的。
    每个线程Thead对象具有一个自己的ThreadLocalMap对象,把线程信息放入到threadlocalMap对象中,同一个线程thread在任何地方都可以拿出来。
    ThreadLocalMap对象的元素entry的key是ThreadLocal对象,value是需要存储的数据,可以具有多个Threadlocal对象(多个不同key)及对应的value数据。

  • 一蓑烟雨 普通 2022-09-29 9:51 上午

    ThreadLocal,顾名思义,线程本地变量,只属于当前线程,其他线程无法获取这个变量,是隔离的。
    每个线程Thead对象具有一个自己的ThreadLocalMap对象,放入到threadlocalMap对象中,同一个线程thread在任何地方都可以拿出来。
    ThreadLocalMap对象的元素entry的key是ThreadLocal对象,value是需要存储的数据,可以具有多个Threadlocal对象(多个不同key)及对应的value数据。