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;
       }
   }```
目录
相关文章
|
6月前
|
存储 安全 Java
【ThreadLocal】
【ThreadLocal】
|
4月前
|
存储
ThreadLocal
ThreadLocal
26 0
|
8月前
|
存储 算法 安全
深入详解ThreadLocal
在我们日常的并发编程中,有一种神奇的机制在静悄悄地为我们解决着各种看似棘手的问题,它就是 ThreadLocal 。
21417 9
深入详解ThreadLocal
|
10月前
|
存储 SQL Java
ThreadLocal的其他应用
request对象跟PageHelper
84 0
|
10月前
|
存储 Java
|
11月前
|
存储 Java 数据库连接
对ThreadLocal的一点了解
ThreadLocal是线程变量,它为每个线程提供单独的存储空间。其主要作用是做线程间的数据隔离,也可以用于在同一个线程间方便地进行数据共享。(对于多线程资源共享,加锁机制采用“时间换空间”,ThreadLocal采用“空间换时间”)
102 0
|
存储 安全 Java
ThreadLocal 使用详解
ThreadLocal 是线程本地变量。当使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程
456 0
|
存储 Java
ThreadLocal相关使用
ThreadLocal相关使用
163 0
ThreadLocal相关使用
|
存储 Java
ThreadLocal理解
ThreadLocal理解
248 0
ThreadLocal理解