java中的ThreadLocal

ThreadLocal是线程局部变量,同一份变量在每一个线程中都保存一份副本,彼此线程之间操作互不影响

测试ThreadLocal

package com.alibaba.fescar.core.protocol.test;

public class TestThreadLocal {

    private static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();

    public static void main(String[] args) {
        threadLocal.set(100);
        new Thread(()->{
            threadLocal.set(200);
            System.out.println("子线程"+threadLocal.get());
        }).start();

        System.out.println("主线程" + threadLocal.get());
    }
}

输出结果


如果子线程不设置ThreadLocal的值,那么get出来的是个什么值呢,将是个null值

 
ThreadLocal机制

实际上,真正起作用的是ThreadLocalMap,介绍下这个ThreadLocalMap

  • 这个Map的Key是ThreadLocal,vlaue是泛型值
  • ThreadLocalMap维护在Thread类中
  • ThreadLocalMap的创建是懒加载创建

下面是Thread类源码,可以看到Thread中维护

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值