谈谈对 ThreadLocal 的理解?
1、Java 的 Web 项目大部分都是基于 Tomcat。每次访问都是一个新的线程,每一个线程都独享一个 ThreadLocal,我们可以在接收请求的时候 set 特定内容,在需要的时候 get 这个值。
2、 ThreadLocal 提供 get 和 set 方法,为每一个使用这个变量的线程都保存有一份独立的副本。
1、get() 方法是用来获取 ThreadLocal 在当前线程中保存的变量副本;
2、set() 用来设置当前线程中变量的副本;
3、 remove() 用来移除当前线程中变量的副本;
4、 initialValue() 是一个 protected 方法,一般是用来在使用时进行重写的,如果在没有 set 的时候就调用 get,会调用 initialValue 方法初始化内容。
评论(2)
看这个:
ThreadLocal,顾名思义,线程本地变量,只属于当前线程,其他线程无法获取这个变量,是隔离的。
每个线程Thead对象具有一个自己的ThreadLocalMap对象,把线程信息放入到threadlocalMap对象中,同一个线程thread在任何地方都可以拿出来。
ThreadLocalMap对象的元素entry的key是ThreadLocal对象,value是需要存储的数据,可以具有多个Threadlocal对象(多个不同key)及对应的value数据。
ThreadLocal,顾名思义,线程本地变量,只属于当前线程,其他线程无法获取这个变量,是隔离的。
每个线程Thead对象具有一个自己的ThreadLocalMap对象,放入到threadlocalMap对象中,同一个线程thread在任何地方都可以拿出来。
ThreadLocalMap对象的元素entry的key是ThreadLocal对象,value是需要存储的数据,可以具有多个Threadlocal对象(多个不同key)及对应的value数据。