首页 > 其他分享 >TransmittableThreadLocal & InheritableThreadLocal

TransmittableThreadLocal & InheritableThreadLocal

时间:2024-04-27 14:57:02浏览次数:13  
标签:Thread get ThreadLocal 线程 TransmittableThreadLocal InheritableThreadLocal

InheritableThreadLocal类是ThreadLocal类的一个子类,它提供了一个线程局部变量,该变量的值可以被当前线程以及所有子线程共享。这在多线程编程中非常有用,特别是在需要在父线程和子线程之间传递数据时。 下面是一个简单的Java代码示例,演示了InheritableThreadLocal的用法:

public class InheritableThreadLocalExample {

    // 创建一个InheritableThreadLocal变量
    private static InheritableThreadLocal<String> threadLocal = new InheritableThreadLocal<>();

    public static void main(String[] args) {
        // 在主线程中设置InheritableThreadLocal的值
        threadLocal.set("Main Thread Value");

        // 创建一个子线程
        Thread childThread = new Thread(() -> {
            // 子线程可以访问到父线程设置的InheritableThreadLocal的值
            System.out.println("Child Thread Value: " + threadLocal.get());
        });

        // 启动子线程
        childThread.start();

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

        // 主线程可以访问到自己设置的InheritableThreadLocal的值
        System.out.println("Main Thread Value: " + threadLocal.get());
    }
}

在这个示例中,主线程设置了InheritableThreadLocal的值为"Main Thread Value",然后创建了一个子线程,在子线程中可以通过get方法获取到父线程设置的值。最后,主线程也可以通过get方法获取到自己设置的值。

 

TransmittableThreadLocal

标签:Thread,get,ThreadLocal,线程,TransmittableThreadLocal,InheritableThreadLocal
From: https://www.cnblogs.com/parkdifferent/p/18162040

相关文章

  • TransmittableThreadLocal 的反复与纠缠
    TransmittableThreadLocal相信很多人用过,一个在多线程情况下共享线程上下文的利器名字好长,以下简称ttl本文以两年前一个真实项目开发遇到的问题,从源码的角度分析并解决环境itemversionjava8springboot2.2.2.RELEASEttl2.11.4代码如下,主线程并行启复......
  • InheritableThreadLocal 使用举例
    ThreadLocalpublicclassMyThreadextendsThread{privateThreadLocal<String>threadLocal=newThreadLocal<>();publicvoidrun(){threadLocal.set("ThreadLocalvalueinMyThread");System.out.println(&quo......
  • TransmittableThreadLocal 如何解决在分布式环境下线程池中使用ThreadLocal的问题
    在分布式环境下,线程池中使用ThreadLocal会出现线程安全问题,因为线程池中的线程是可以被多个请求共享的,当多个请求同时访问同一个ThreadLocal变量时,会出现数据互相干扰的问题。为了解决这个问题,Java提供了TransmittableThreadLocal类。TransmittableThreadLocal是ThreadLocal的一......
  • Java中的ThreadLocal和 InheritableThreadLocal
    Java中的ThreadLocal和InheritableThreadLocalpackagecom.example.core.mydemo.java;/***output*Thread-0ThreadLocalvalue:null*Thread-0InheritableThreadLocalvalue:InheritableThreadLocalstring*/publicclassThreadLocalTest{publicstati......
  • ThreadLocal和InheritableThreadLocal详解,基本原理及注意项 父子线程数据共享
    一、ThreadLocal介绍在多线程环境下访问同一个线程的时候会出现并发问题,特别是多个线程同时对一个变量进行写入操作时,为了保证线程的安全,通常会进行加锁来保证线程的安全,但是加锁又会造成效率的降低;ThreadLocal是jdk提供的除了加锁之外保证线程安全的方法,其实现原理是在Thread类......
  • 谈谈对TransmittableThreadLocal的理解
    前言最近遇到一个问题,公司内部有一个公共的SSO包,用来获取HTTP请求中的登录态,代码中会直接用这个包的方法获取用户登录信息,在代码任意位置直接用SSOUtil.getUser()获取用户信息,在我们一个下载的业务代码中,用到了线程池开启子任务处理请求,结果发现子任务中拿到的用户信息和HTTP请......
  • 线程池使用InheritableThreadLocal踩坑总结
    一、缘起某天测试环境更新后,有小伙伴反应页面会随机性的发生请求参数为空的情况(request.getParamter为空),但是前端的参数是传了的,而且不能稳定重现,需要在页面上经过一番操作之后才会发生,而当问题重现之后,之前那些可用的页面就变得不可用了,然后就会在可用和不可用之间交替........
  • 异步线程变量传递必知必会---InheritableThreadLocal及底层原理分析
    InheritableThreadLocal简介笑傲菌:多线程热知识(一):ThreadLocal简介及底层原理3赞同·0评论文章上一篇文章我们聊到了ThreadLocal的作用机理,但是在文章的末尾,我提到了一个问题,ThreadLocal无法实现异步线程变量的传递。什么意思呢?以下面的代码为例子:@SneakyThrowspublicBo......
  • ThreadLocal 和 InheritableThreadLocal 的区别
    结论:同一个ThreadLocal变量不能在子线程中获取到,而InheritableThreadLocal变量中的值可以在父子线程之间传递。例子:publicclassMain{privatestaticThreadLocal<String>threadLocal=newThreadLocal<>();privatestaticInheritableThreadLocal<String>i......
  • 线程间数据传递之ThreadLocal、InheritableThreadLocal、TransmittableThreadLocal
    前言在JAVA中线程之间传输数据的方式有多种,而本文旨在探讨ThreadLocal及其衍生类的使用场景。使用场景业务系统的参数传递:在我们的业务系统中可能会用到许多公共参数,可能是用户的token信息,在我们链路中可能某一个方法需要用到它,那么我们又不想一层层的传递它。分布式系统要打......