ThreadLocal

ThreadLocal,第1张

ThreadLocal ThreadLocal 1.ThreadLocal原理

ThreadLocal,连接ThreadLocalMap和Thread。来处理Thread的TheadLocalMap属性,包括init初始化属性赋值、get对应的变量,set设置变量等。通过当前线程,获取线程上的ThreadLocalMap属性,对数据进行get、set等 *** 作。

ThreadLocalMap,用来存储数据,采用类似hashmap机制,存储了以threadLocal为key,需要隔离的数据为value的Entry键值对数组结构。

ThreadLocal,有个ThreadLocalMap类型的属性,存储的数据就放在这儿。

2.ThreadLocal的API
  1. set(T t)方法:在当前线程中,往ThreadLocal对象中存入一个数据
  2. get()方法:在当前线程中,从ThreadLocal对象中取出数据
  3. remove()方法: 移除ThreadLocal中保存的当前线程的数据
3.测试
public class TestThreadLocalDemo {
    public static void main(String[] args) {
        //ThreadLocal是一个在同一个线程中共享数据的容器
//        它底层维护了一个Map,map的key就是线程Thread,它的value就是该县城需要存储的数据
        ThreadLocal threadLocal = new ThreadLocal<>();
        threadLocal.set("张三");
        threadLocal.set("李四");
        threadLocal.set("王五");
        threadLocal.set("赵六");
        new Thread(()->{
            threadLocal.set("孙七");
            System.out.println("key为new Thread的新线程的value为"+threadLocal.get());
        }).start();
        new Thread(()->{
            threadLocal.set("高八");
            System.out.println("key为new Thread的新线程的value为"+threadLocal.get());
        }).start();
        System.out.println("key为默认的主线程的value为"+threadLocal.get());
    }
}

测试结果:

4.结论

一个ThreadLocal对象,在一个线程中只能存储一个数据,在该线程的任何地方调用get()方法获取到的都是同一个数据

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5696984.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存