首页 > 其他分享 >ThreadLocal的介绍及其使用

ThreadLocal的介绍及其使用

时间:2023-08-30 17:11:17浏览次数:36  
标签:Thread THREAD get 及其 介绍 ThreadLocal 线程 LOCAL

private static final ThreadLocal<Integer> THREAD_LOCAL = new ThreadLocal<>();

    @Test
    void threadLocalTest() {
        Assertions.assertDoesNotThrow(() -> {
            // 线程1存储数据
            Thread t1 = new Thread(() -> {
                THREAD_LOCAL.set(10);
                log.info("Thread 1 stored data: " + THREAD_LOCAL.get()); // 输出10
                // 清除当前线程的数据
                THREAD_LOCAL.remove();
            });

            // 线程2存储数据
            Thread t2 = new Thread(() -> {
                THREAD_LOCAL.set(20);
                log.info("Thread 2 stored data: " + THREAD_LOCAL.get()); // 输出20
                // 清除当前线程的数据
                THREAD_LOCAL.remove();
            });

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

            try {
                t1.join();
                t2.join();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }

            // 主线程获取数据
            log.info("Main thread data: " + THREAD_LOCAL.get()); // 输出null

            // 清除当前线程的数据
            THREAD_LOCAL.remove();
        });
    }

ThreadLocal是Java中的一个线程级别的变量,它提供了一种线程内部的数据共享和访问机制。通过ThreadLocal,每个线程可以独立地存储和获取自己的数据,而不会影响其他线程。

ThreadLocal的用法如下:

  1. 创建ThreadLocal实例:通过ThreadLocal<T>来创建一个ThreadLocal对象,其中T表示泛型类型,代表要存储的数据类型。
  2. 存储数据:使用set(T value)方法将数据存储到当前线程的ThreadLocal对象中。每个线程都有自己独立的数据副本,互不干扰。
  3. 获取数据:使用get()方法从当前线程的ThreadLocal对象中获取数据。
  4. 初始化数据:可以通过重写initialValue()方法来为ThreadLocal提供初始值。该方法会在第一次调用get()set()时被调用。
  5. 删除数据:可以使用remove()方法来清除当前线程的ThreadLocal对象中的数据。

标签:Thread,THREAD,get,及其,介绍,ThreadLocal,线程,LOCAL
From: https://www.cnblogs.com/ashet/p/17667748.html

相关文章

  • ReentrantLock的介绍及其用法
    Reentrantlock默认是非公平锁privatestaticReentrantLocklock=newReentrantLock();若想实现公平锁,只需在构造器的fair参数传入trueprivatestaticReentrantLocklock=newReentrantLock(true);公平锁会按照线程请求锁的顺序进行获取,遵循先到先得的原则。而非公平锁则......
  • 基础介绍篇
    一.在学习之前我们需要了解爬虫的基本流程:1.首先我们要向目标站点发送一个请求,其中包括请求头和请求体等。2.然后页面会反馈给我们一个响应的内容,response包括了HTML、json,图片及视频等。3.解释内容因为返回的response内容是数据我们要转换成我们需要的内容就需要对其进行解析......
  • Python教程(11)——Python中的字典dict的用法介绍
    列表虽然好,但是如果需要快速的数据查找,就必须进行需要遍历,也就是最坏情况需要遍历完一遍才能找到需要的那个数据,时间复杂度是O(n),显然这个速度是很难接受的,于是就必须要有新的数据结构出现,于是字典就诞生了!在Python中,字典(Dictionary)是一种无序的数据结构,用于存储键值对(key-value)。......
  • Skywalking UI介绍
    Skywalkingui页面功能菜单栏 仪表盘:查看被监控服务的运行状态;拓扑图:以拓扑图的方式展现服务之间的关系,并以此为入口查看相关信息;追踪:以接口列表的方式展现,追踪接口内部调用过程;性能剖析:对端点进行采样分析,并可查看堆栈信息;告警:触发告警的告警列表,包括服务失败率,请求超......
  • RabbitMQ快速入门--介绍和安装
                     ......
  • 深入详解ThreadLocal
    本文已收录至GitHub,推荐阅读......
  • 8.29日遇到的问题及其解决
    问题1问题描述:pip安装virtualenvwrapper,在/usr/local/bin目录下找不到virtualenvwrapper.sh原因:猜测为权限问题:/usr/local/bin为当前系统的管理员权限的目录,没有足够的权限来写入该目录,那么安装可能会失败。解决:管理员权限重新安装sudopipuninstallvirtualenvwrappersudo......
  • 自我介绍
     1.自我介绍:大家好,我叫徐清恬,来自云南,用三个词语概括自己的话,我想是好奇心,慢热,乐观。首先,一般来说我对未知的人和事都抱有很大的好奇心,所以很乐意去了解,也愿意去尝试;其次,我很期待在大学里交到来自五湖四海的朋友,去认识不同的人,看不同的风景,但是会有一点点害羞,相处下来就会知道我......
  • 【1.0】Docker介绍
    【一】Docker是什么Docker是一个开源项目,旨在实现轻量级的操作系统虚拟化解决方案。它最初是由dotCloud公司内部的一个业余项目开始的,并且后来成为了DockerInc.公司的主要产品。该项目在2013年开源,并加入了Linux基金会,按照Apache2.0协议进行维护。Docker基于Go语言......
  • SqlServer中查询数据库所有表及其数据总条数和占用空间
    1、查询某数据库中的所有数据表SELECTname数据表FROMsysobjectsWHERExtype='u'ORDERBYname2、查询某数据库中的所有数据表及其数据总条数SELECTa.name数据表,b.rows数据总条数FROMsysobjectsASaINNERJOINsysindexesASbONa.id=......