栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

ThreadLocal

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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()方法获取到的都是同一个数据

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/696847.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号