并发编程笔记8--ThreadLocal结构详解

ThreadLocal,即线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在线程上,也就是说一个线程可以根据一个ThreadLocal对象查询到绑定在这个线程上的值。可以通过set(T)方法来设置一个值,在当前线程下在通过get()方法获取到原先设置的值。

首先来看下set方法,基于JDK8

复制代码
/**
     * 将此线程局部变量的当前线程副本设置为指定值。大多数子类不需要重新此方法,
     * 仅依靠initialValue方法来设置线程局部变量的值
     *
     * @param value the value to be stored in the current thread's copy of
     *        this thread-local.
     */
    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }
    
     /**
     * 获取与ThreadLocal关联的map,在InheritableThreadLocal中重写
     *
     * @param  t the current thread
     * @return the map
     */
    ThreadLocalMap getMap(Thread t) {
        return t.threadLocals;
    }

在set方法中,首先获取当前线程,然后获取当前线程关联的ThreadLocalMap,而ThreadLocalMap是ThreadLocal类中定义的一个结构。ThreadLocalMap的部分源码如下:

复制代码
static class ThreadLocalMap {
				static class Entry extends WeakReference<ThreadLocal<?>> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal<?> k, Object v) {
                super(k);
                value = v;
            }
        }
}

其在ThreadLocalMap中定义了一个Entry对象用来存储我们在set方法中方的值。

ThreadLocal介绍

相关推荐
不动明王呀16 分钟前
almalinux8.10配置免密登录笔记
笔记
问心无愧051323 分钟前
ctf show web 入门152
前端·笔记
YOU OU28 分钟前
SpringBoot 配置文件
java·spring boot·后端
c++之路29 分钟前
观察者模式(Observer Pattern)
java·网络·观察者模式
Dicky-_-zhang31 分钟前
云原生存储与数据库选型实战:从传统数据库到云原生数据库的演进
java·jvm
凝小飞35 分钟前
cucumber JAVA 一键部署指南
java·集成测试·模块测试
java修仙传36 分钟前
Java 实习日记:断面状态筛选 Bug 修复与对比案例日期过滤优化
java·bug·实习
05候补工程师37 分钟前
【408狂飙·数据结构】核心考点深度复盘:数组地址计算、特殊矩阵压缩存储与树的五大性质解题直觉
数据结构·笔记·线性代数·考研·算法·矩阵
长谷深风11138 分钟前
Java并发编程:线程安全与多线程实战指南【个人八股】
java·安全·线程·进程·juc·并发与并行·上下文切换(性能影响因素)
小+不通文墨1 小时前
在树莓派中部署emqx
经验分享·笔记·单片机·学习