ThreadLocal源码原理与案例分析

1.类结构

主要是使用内部静态类:ThreadLocalMap

既然是内部静态类那这一块就涉及到 内部静态类对象创建的相关知识点

ThreadLocal.ThreadLocalMap初始化

 通过此方法:

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

其中

void createMap(Thread t, T firstValue) {
    t.threadLocals = new ThreadLocalMap(this, firstValue);
}

此方法标明了:

如果通过ThreadLocal存放变量到ThreadLocalMap中的时候如果 当前线程中引用的

ThreadLocal.ThreadLocalMap threadLocals = null;

则创建t.threadLocals = new ThreadLocalMap(this, firstValue);

并且将此ThreadLocalMap引用给threadLocals

 

通过上述分析总结如下几点:

1. 每个线程有自己独立的 ThreadLocalMap ,在此ThreadLocalMap 创建的时候将此对象的引用赋值给Thread的

ThreadLocal.ThreadLocalMap threadLocals

2.一个线程可以有多个ThreadLocal对象

3.ThreadLocalMap  里面存这以ThreadLocal对象为Key,ThreadLocal的值为值;

4.通过当前线程Thread对象获取此对象引用的ThreadLocalMap ,再通过ThreadLocal对象为可以获取存储的变量的值。

疑问?

如下代码:

public class ThreadLocalSimpleDemo {
    public static void main(String[] args) {
        Thread thread = Thread.currentThread();
        
        System.out.println("测试ThreadLocal");
 
    }
}

此thread在什么时候设置的ThreadLocal.ThreadLocalMap threadLocals赋值?

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值