ThreadLocal提供线程内变量的存取操作,方便在同个线程里面,数据的获取。减少函数或者组件的公共变量传递的复杂度。
一、特性
各个线程存储的变量是相互独立的。比如,在线程A里面,只能获取在A线程存储的数据变量,不能获取其它线程的变量。
二、重要方法
1、get(),获取当前线程存储变量
3、set(),把 变量存在当前线程里面
三、原理
1、每个线程里面有个ThreadLocal.ThreadLocalMap成员变量,不同线程有不同ThreadLocalMap实例
2、当线程A调用ThreadLocal的set和get方法,会获取线程A里面ThreadLocalMap的实例,然后进行存储和获取。从而实现线程间的数据隔离
四、当前线程存储多个变量
ThreadLocal.ThreadLocalMap是使用key-value结构存储数据,当你存储多个变量时
比如
ThreadLocal stringLocalOne= new ThreadLocal();
ThreadLocal stringLocalTwo= new ThreadLocal();
ThreadLocal intergerLocal = new ThreadLocal();
在线程A依次调用如下方法
stringLocalOne.set("One");
stringLocalTwo.set("two")
intergerLocal .set(10);
假如上面key依次对应为 stringOne,stringTwo, integerDefault,那么在ThreadLocalMap里面,以stringOne-one,stringTwo-two,integerDefault-10的形式相应存储数据(这里为了方便举例,假设这样,源码实际并不是这样存储)
这里这是大概说下我的对ThreadLocal的理解,建议大家还是去撸一遍ThreadLocal源码
网友评论