ThreadLocal
-
什么是ThreadLocal:
- 它提供线程本地变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题。
-
API讲解:
- void set(T value)设置当前线程的线程局部变量的值;
- T get()该方法返回当前线程所对应的线程局部变量;
- void remove() 将当前线程局部变量的值删除,目的是为了减少内存的占用,该方法是JDK 5.0新增的方法。需要指出的是,当线程结束后,对应该线程的局部变量将自动被垃圾回收,所以显式调用该方法清除线程的局部变量并不是必须的操作,但它可以加快内存回收的速度。
-
源码分析:
ThreadLocal在使用的时候:对象实例与ThreadLocal变量的映射关系是由线程Thread来维护的。
上述解释:对象实例与ThreadLocal变量的映射关系是存放在一个Map中的,这个map是一个抽象的map并不是java.util中的map。该map是Thread类中的一个字段而已!而真正存放映射关系的map是ThreadLocalMap。
-
核心描述:当我们创建一个Thread时内部有一个ThreadLocalMap变量该变量又是一个内部类,其内部有包含一个Entry变量,entry变量又是ThreadLocalMap的一个内部类,Entry为数组类型。注意此处的Entry采用的是弱引用。
来源:oschina
链接:https://my.oschina.net/u/3670669/blog/3196168