ThreadLocal的个人理解

简介: console.log(1)

ThreadLocal的设计思想十分简单,它的核心对象就是ThreadLocalMap,被声明在Thread类里面,每个Thread都持有一个ThreadLocalMap,所以才能实现线程隔离,以达到存储共享变量的作用:

ThreadLocal.ThreadLocalMap threadLocals = null;
对ThreadLocalMap的所有操作都在ThreadLocal类里面,我认为ThreadLocal本身其实只是个工具类,ThreadLocalMap 才是共享变量在线程中的副本的存在。下面是ThreadLocal中对线程的ThreadLocalMap 的操作:

//设置当前线程的共享变量的值,key为ThreadLocal对象本身,value为共享变量的值

    Thread t = Thread.currentThread();
    ThreadLocalMap map = getMap(t);
    if (map != null)
        map.set(this, value);
    else
        createMap(t, value);
}```

//获取当前线程的共享变量的值
Thread t = Thread.currentThread();
ThreadLocalMap map = getMap(t);
if (map != null) {
    ThreadLocalMap.Entry e = map.getEntry(this);
    if (e != null)
        return (T)e.value;
}
return setInitialValue();

}`

//得到线程的ThreadLocalMap对象

    return t.threadLocals;
}```

//为一个线程创建一个ThreadLocalMap对象
t.threadLocals = new ThreadLocalMap(this, firstValue);

}`
我们来说说ThreadLocalMap这个对象,它是一个hashmap结构,每个key和value都构成一个Entry,这个Entry继承了弱引用:

       /** The value associated with this ThreadLocal.**/
       Object value;
       Entry(ThreadLocal k, Object v) {
           super(k);
           value = v;
       }
   }```
目录
相关文章
|
存储 安全 Java
【ThreadLocal】
【ThreadLocal】
|
4月前
|
Java 测试技术 索引
ThreadLocal详解
文章详细讨论了Java中的`ThreadLocal`,包括它的基本使用、定义、内部数据结构`ThreadLocalMap`、主要方法(set、get、remove)的源码解析,以及内存泄漏问题和避免策略。`ThreadLocal`提供了线程局部变量,确保多线程环境下各线程变量的独立性,但不当使用可能导致内存泄漏,因此建议在不再需要`ThreadLocal`变量时调用其`remove`方法。
124 2
ThreadLocal详解
|
6月前
|
Java
ThreadLocal 场景题
ThreadLocal 场景题
41 1
|
7月前
|
存储 Java 数据管理
ThreadLocal的使用
`ThreadLocal`是Java中的线程局部变量工具,确保每个线程都有自己的变量副本,互不干扰。适用于保持线程安全性数据和跨方法共享数据。基本用法包括创建实例、设置和获取值以及清除值。例如,创建ThreadLocal对象后,使用`.set()`设置值,`.get()`获取值,`.remove()`清除值。注意ThreadLocal可能引起内存泄漏,应适时清理,并谨慎使用以避免影响代码可读性和线程安全性。它是多线程编程中实现线程局部数据管理的有效手段。
98 10
|
存储 Java
ThreadLocal
ThreadLocal字面意思本地线程,ThreadLocal使每个线程之间是隔离的,数据是独立的,我们使用过session都知道 session是一个会话,我们可以用它来存储一些用户的基本信息,这样每个用户在服务端都能取到,ThreadLocal也可以做到, ThreadLocal将相应的信息存储在当前的线程中,只有当前线程能够访问,其他线程不能访问,其实ThreadLocal 可以说是一个定制化的Map。
63 0
|
缓存 安全 Java
浅谈ThreadLocal
浅谈ThreadLocal
156 0
|
存储 Java
ThreadLocal相关使用
ThreadLocal相关使用
199 0
ThreadLocal相关使用
|
存储 Java
ThreadLocal理解
ThreadLocal理解
296 0
ThreadLocal理解
|
Java 应用服务中间件
我把 ThreadLocal 能问的,都写了(下)
我把 ThreadLocal 能问的,都写了(下)
我把 ThreadLocal 能问的,都写了(下)