并发编程-基础篇(十) -ThreadLocal

ThreadLocal是用来提供本地线程变量的,也就是你创建了一个ThreadLcoal变量,那么访问这个变量的每个线程都会有这个变量的副本.当多个线程操作这个变量,实际操作的是自己本地内存里面的变量.

ThreadLocal的实现原理:

  1. ThreadLocal是由map实现的.为什么使用map而不是使用其他数据结构呢?因为每个线程可以关联多个ThreadLocal
  2. ThreadLocal的数据存放在线程的threadLocals变量中,存放在线程的内存中,所以ThreadLcoal只是一个空壳
  3. ThreadLocal不支父子线程之间的数据传递
public class ThreadLocalTest {

    static ThreadLocal<String> threadLocal=new ThreadLocal<>();
    static  void print(String str){
        System.out.println(str+":"+threadLocal.get());
        threadLocal.remove();
    }

    public static void main(String[] args) {
//        new Thread(()->{
//            threadLocal.set("哈哈哈哈哈哈");
//            print("threadOne");
//            System.out.println("threadOne remove after :"+threadLocal.get());
//        }).start();
//
//
//        new Thread(()->{
//            threadLocal.set("uyayyayya");
//            print("threadTwo");
//            System.out.println("threadTwo remove after :"+threadLocal.get());
//        }).start();

        // 设置线程变量
        threadLocal.set("hello world");
        Thread thread = new Thread(() -> {
            System.out.println("thread:" + threadLocal.get());
        });
        thread.start();
        try {
            thread.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("main thread:"+threadLocal.get());
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值