美文网首页程序员
父子线程值传递问题,ThreadLocal存储值变化

父子线程值传递问题,ThreadLocal存储值变化

作者: zhangweisep | 来源:发表于2020-03-17 15:03 被阅读0次

此处引用了alibaba线程池来解决父子线程间传值及线程池使用后无法初始化问题

public static void main(String[] args) throws InterruptedException {
        //创建父线程
        //做测试时注意观察ThreadLocal存储的值的变化
        final ThreadLocal<String> objectThreadLocal = new TransmittableThreadLocal<>();
        //final ThreadLocal<String> objectThreadLocal = new ThreadLocal<>();
        objectThreadLocal.set("测试");
        //创建一个线程运行实例
        Runnable runnable = () -> {
            System.out.println("-------------------------------------------------");
            System.out.println("修改前" + Thread.currentThread() + ": " + objectThreadLocal.get());
            objectThreadLocal.set("111111");
            System.out.println("修改后" + Thread.currentThread() + ": " + objectThreadLocal.get());
            System.out.println("-----------------------------------------------------");
        };

        /*new Thread(runnable).start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(runnable).start();
        TimeUnit.SECONDS.sleep(1);
        new Thread(runnable).start();
        TimeUnit.SECONDS.sleep(1);*/
        //创建线程池
        ExecutorService executorService = Executors.newFixedThreadPool(1);
        //普通使用方式
        //executorService.submit(new Thread(runnable));
        //TimeUnit.SECONDS.sleep(1);
        //executorService.submit(new Thread(runnable));
        //TimeUnit.SECONDS.sleep(1);
        //executorService.submit(new Thread(runnable));
        //TimeUnit.SECONDS.sleep(1);

        //使用TtlRunnable包装Runnable
        TtlRunnable ttlRunnable = TtlRunnable.get(runnable);
        //执行线程实例-1
        executorService.submit(ttlRunnable);
        //设置等待时间
        TimeUnit.SECONDS.sleep(1);
        //执行线程实例-2
        executorService.submit(ttlRunnable);
        //设置等待时间
        TimeUnit.SECONDS.sleep(1);
        //执行线程实例-3
        executorService.submit(ttlRunnable);
        //设置等待时间
        TimeUnit.SECONDS.sleep(1);
        
        System.out.println(Thread.currentThread() + ": "+objectThreadLocal.get());
        //强制程序运行以查看相应状态
        executorService.shutdown();

    }

相关文章

  • 父子线程值传递问题,ThreadLocal存储值变化

    此处引用了alibaba线程池来解决父子线程间传值及线程池使用后无法初始化问题

  • ThreadLocal源码分析

    ThreadLocal是什么? 顾名思义,ThreadLocal可以为每个线程独立存储不同的值(线程本地变量)。其...

  • TtlExecutors

    问题:在使用线程池等会缓存线程的组件情况下,提供ThreadLocal值的传递功能。 JDK的Inheritabl...

  • 父子线程值传递

    1.问题描述父子线程或线程池缓存线程复用时值未传递问题2.解决方法引入依赖 2.代码 控制台: 由此可见,从Ser...

  • ThreadLocal源码分析

    ThreadLocal,线程变量,是一个以ThreadLocal对象为键,任意对象为值 的存储 结构。该结构附着于...

  • 自定义注解,aop+AbstractRoutingDataSou

    1,动态数据源类 2,使用本地ThreadLocal,存储当前线程的数据源。 threadlocal将具体的值保存...

  • ThreadLocal的使用

    ThreadLocal,线程变量,是一个以ThreadLocal对象为键,任意对象为值的存储结构。这个结构被附带在...

  • 安卓基础

    1.ThreadLocal 的使用及其源码实现ThreadLocal中存储的值是如何保证绝对的线程安全的? 实际上...

  • ThreadLocal的正确认识

    ThreadLocal是什么 ThreadLocal能使线程中的某个值与保存值的对象关联起来,每个使用改变量的线程...

  • ThreadLocal作用以及内存泄漏

    一. ThreadLocal作用 存储单个线程上下文信息使变量线程安全减少参数传递 二. ThreadLocal实...

网友评论

    本文标题:父子线程值传递问题,ThreadLocal存储值变化

    本文链接:https://www.haomeiwen.com/subject/bpetyhtx.html