ThreadLocal

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


相关文章
|
4月前
|
存储 Java
ThreadLocal应用及理解
ThreadLocal应用及理解
47 10
|
6月前
|
存储 Java
ThreadLocal 有什么用
ThreadLocal 有什么用
52 0
|
存储 安全 Java
ThreadLocal介绍和应用
ThreadLocal介绍和应用
65 0
|
存储 Java
|
存储 分布式计算 安全
什么是ThreadLocal?
这篇文章是慕课网上一门免费课程《ThreadLocal》的观后总结。这门课将ThreadLocal讲得非常清晰易懂,又深入底层原理和设计思想,是我看过的最好的ThreadLocal的资料,现在把用自己的话,把它整理成文字版本。 总共预计产出四篇文章,这是第一篇。
266 3
|
存储 Java
ThreadLocal相关使用
ThreadLocal相关使用
192 0
ThreadLocal相关使用
|
存储 Java
对threadlocal了解多少?
通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢? JDK 中提供的 ThreadLocal 类正是为了解决这样的问题。 ThreadLocal 类主要解决的就是让每个线程绑定自己的值,可以将 ThreadLocal 类形象的比喻成存放数据的盒子,盒子中可以存储每个线程的私有数据。
|
存储 安全 Java
ThreadLocal 使用详解
ThreadLocal 是线程本地变量。当使用 ThreadLocal 维护变量时,ThreadLocal 为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会影响其它线程
543 0
|
存储 Java
ThreadLocal理解
ThreadLocal理解
285 0
ThreadLocal理解