并发编程之ThreadLocal详解

冷暖自知 提交于 2020-03-17 01:26:16

某厂面试归来,发现自己落伍了!>>>

ThreadLocal

  • 什么是ThreadLocal:

    • 它提供线程本地变量,如果创建一个ThreadLocal变量,那么访问这个变量的每个线程都会有这个变量的一个副本,在实际多线程操作的时候,操作的是自己本地内存中的变量,从而规避了线程安全问题。
  • API讲解:

    1. void set(T value)设置当前线程的线程局部变量的值;
    2. T get()该方法返回当前线程所对应的线程局部变量;
    3. 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采用的是弱引用。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!