ThreadLocal解析

博客介绍了Java中ThreadLocal类,它位于java.lang包下,内部有静态内部类ThreadLocalMap。其get方法会获取当前线程对象,通过getMap()得到当前线程对象的ThreadLocalMap对象。ThreadLocal主要对当前线程的ThreadLocalMap属性进行读取、写入和删除操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ThreadLocal 是java.lang 包下的一个类。

前提:ThreadLocal里面有一个静态内部类 ThreadLocalMap 

先看get方法 

   public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
    }

 得到当前线程对象,getMap()方法是得到当前线程对象的ThreadLocalMap对象(Thread类也有ThreadMap这个属性)

   /* ThreadLocal values pertaining to this thread. This map is maintained
     * by the ThreadLocal class. */
    ThreadLocal.ThreadLocalMap threadLocals = null;
    private Entry getEntry(ThreadLocal<?> key) {
            int i = key.threadLocalHashCode & (table.length - 1);
            Entry e = table[i];
            if (e != null && e.get() == key)
                return e;
            else
                return getEntryAfterMiss(key, i, e);
        }

一句话总结:ThreadLocal 得到当前线程的ThreadLocalMap属性,然后对这个属性进行读取,写入和删除操作;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值