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

👉 TransmittableThreadLocal(TTL):在使用线程池等会池化复用线程的执行组件情况下,提供ThreadLocal值的传递功能,解决异步执行时上下文传递的问题。一个Java标准库本应为框架/中间件设施开发提供的标配能力,本库功能聚焦 & 0依赖,支持Java 6~21

JDKInheritableThreadLocal类可以完成父线程到子线程的值传递。但对于使用线程池等会池化复用线程的执行组件的情况,线程由线程池创建好,并且线程是池化起来反复使用的;这时父子线程关系的ThreadLocal值传递已经没有意义,应用需要的实际上是把 任务提交给线程池时的ThreadLocal值传递到 任务执行时。

本库提供的TransmittableThreadLocal类继承并加强InheritableThreadLocal类,解决上述的问题,使用详见 User Guide

 https://github.com/alibaba/transmittable-thread-local

 

 
 
posted @ 2024-04-27 14:43  parkdifferent  阅读(14)  评论(0编辑  收藏  举报