CSDN博主:【java_wxid】
CSDN博主:点击【Java廖志伟】
CSDN社区:点击【幕后大佬】
码云:点击【互联网Java工程师知识扫盲】
随笔 - 882,  文章 - 0,  评论 - 1,  阅读 - 51500

文章目录

ThreadLocal

ThreadLocal类是Java中一个很重要的多线程工具,它提供了一种线程安全的变量访问方式。

ThreadLocal允许我们创建只在当前线程中有效的变量。也就是说,只要我们把变量放到ThreadLocal中,就可以保证每个线程都拥有属于自己的变量副本,不会受到其他线程的影响。

下面是一个简单的ThreadLocal示例代码:

public class ThreadLocalDemo {
    private static final ThreadLocal<String> threadLocal = new ThreadLocal<>();

    public static void main(String[] args) {
        Thread t1 = new Thread(() -> {
            threadLocal.set("Thread1");
            System.out.println(threadLocal.get());
        });

        Thread t2 = new Thread(() -> {
            threadLocal.set("Thread2");
            System.out.println(threadLocal.get());
        });

        t1.start();
        t2.start();
    }
}

这段代码创建了一个ThreadLocal对象,使用了一个静态变量来持有它。然后,我们创建了两个线程t1和t2,在每个线程中设置了一个属于它们自己的值,并打印出来。

运行这段代码,我们会发现输出结果分别是:

Thread1
Thread2

这是因为ThreadLocal确保每个线程都有自己的变量副本,这样它们的修改互不干扰。

ThreadLocal可以防止多个线程之间相互影响,使线程间数据隔离开来。这在一些需要保证线程安全的场景中非常有用。例如,一个Web应用程序中的每个请求都会创建一个线程来处理请求,此时我们可以使用ThreadLocal来保证线程的安全。

总结一下,ThreadLocal的主要作用就是为每个线程提供一个独立的变量副本,从而保证线程安全。在实际工作中使用ThreadLocal的时候,一定要注意避免内存泄漏和重复使用的问题。

小故事

有一次,小明去图书馆借书,但是发现自己忘记带借书证了。图书馆管理员告诉他可以填写一张表格,上面写有他的个人信息和借书数量,然后将表格放在柜台上,下次借书的时候只需要报出自己的名字就可以了。

这个过程中,表格就可以类比为 ThreadLocal。每个线程可以通过 ThreadLocal 存储自己的信息,这些信息只在当前线程内部可见,并且在线程池中不同的线程也拥有自己独立的表格(ThreadLocal),互不干扰。

在程序中,我们可以通过 ThreadLocal 的 set() 方法将需要保存的信息存储到当前线程中,然后通过 get() 方法获取。当我们需要清理这些信息时,只需要调用 ThreadLocal 的 remove() 方法即可。

而底层的实现原理则是使用了一个 ThreadLocalMap 来存储不同线程的信息,ThreadLocalMap 是一个数组,每个数组元素存储着 ThreadLocal 对象和对应的值。当线程访问 ThreadLocalMap 中的一个 ThreadLocal 对象时,实际上是通过该线程自己的 ThreadLocalMap 对象来查找的,因此不同线程访问 ThreadLocalMap 中同一 ThreadLocal 对象时,取到的值是不同的。

posted on   我是廖志伟  阅读(14)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

南北踏尘
点击右上角即可分享
微信分享提示