java子线程中获取父线程的threadLocal中的值
时间:2020-04-12
本文章向大家介绍java子线程中获取父线程的threadLocal中的值,主要包括java子线程中获取父线程的threadLocal中的值使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
一、java子线程中获取父线程的threadLocal中的值
threadLocal可以做线程级的数据隔离,那如何在子线程中获取父线程的值呢? 可以使用InheritableThreadLocal
/** * Java子线程获取父线程的threadLocal中的值 */ public class ThreadDemo1 { public static final InheritableThreadLocal<String> inheritableThreadLocal = new InheritableThreadLocal<>(); public static final ThreadLocal<String> threadLocal = new ThreadLocal<>(); public static void main(String[] args) throws Exception { inheritableThreadLocal.set("inheritableThreadLocal hello"); threadLocal.set("threadLocal world"); new Thread(()->{ System.out.println(String.format("子线程可继承值:%s", inheritableThreadLocal.get())); System.out.println(String.format("子线程值:%s", threadLocal.get())); new Thread(()->{ System.out.println(String.format("孙线程可继承值:%s", inheritableThreadLocal.get())); System.out.println(String.format("孙线程值:%s", threadLocal.get())); }).start(); }).start(); Thread.sleep(3000); System.out.println("--------------修改可继承值threadLocal和threadLocal的值--------------------"); inheritableThreadLocal.set("inheritableThreadLocal hello2"); threadLocal.set("threadLocal world2"); new Thread(()->{ System.out.println(String.format("子线程可继承值:%s", inheritableThreadLocal.get())); System.out.println(String.format("子线程值:%s", threadLocal.get())); new Thread(()->{ System.out.println(String.format("孙线程可继承值:%s", inheritableThreadLocal.get())); System.out.println(String.format("孙线程值:%s", threadLocal.get())); }).start(); }).start(); } }
输出结果如下:
子线程可继承值:inheritableThreadLocal hello 子线程值:null 孙线程可继承值:inheritableThreadLocal hello 孙线程值:null --------------修改可继承值threadLocal和threadLocal的值-------------------- 子线程可继承值:inheritableThreadLocal hello2 子线程值:null 孙线程可继承值:inheritableThreadLocal hello2 孙线程值:null
说明在子线程和孙线程中可以获取到父线程的 inheritableThreadLocal 的值。修改inheritableThreadLocal 的值后,子线程和孙线程中同样可以获取到父线程的inheritableThreadLocal 的值。
但是threadLocal却不行,获取到的值为空。
原文地址:https://www.cnblogs.com/linlf03/p/12687457.html
- 《了不起的 nodejs》中 TwitterWeb 案例 bug 解决
- java.lang.ClassNotFoundException与java.lang.NoClassDefFoundError的区别
- 【java开发系列】—— Tomcat编译报错
- java.lang.NoClassDefFoundError: org/aopalliance/aop/Advice
- 《像计算机科学家一样思考Java》—— 读后总结
- 记录安装oracle的那些事(三)之oracle Database R2安装
- Elasticsearch Javascript API增删改查
- Oracle二三事之 Oracle SPARC SuperCluster的九大技术优势
- 两个 viewports 的故事-第二部分
- 通过 JS 实现简单的拖拽功能并且可以在特定元素上禁止拖拽
- AngularJS 技术总结
- 《linux c编程指南》学习手记5
- AngularJS API之bootstrap启动
- 通过 JS 判断页面是否有滚动条的简单方法
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- PHP设计模式之单例模式定义与用法分析
- PHP面向对象程序设计之接口的继承定义与用法详解
- PHP简单验证码功能机制实例详解
- php高清晰度无损图片压缩功能的实现代码
- Python自省及反射原理实例详解
- 浅谈django框架集成swagger以及自定义参数问题
- keras CNN卷积核可视化,热度图教程
- 解决tensorflow读取本地MNITS_data失败的原因
- 浅谈keras中Dropout在预测过程中是否仍要起作用
- 浅谈keras中loss与val_loss的关系
- python中tkinter窗口位置坐标大小等实现示例
- python os模块在系统管理中的应用
- Laravel路由研究之domain解决多域名问题的方法示例
- python GUI模拟实现计算器
- 详解php命令注入攻击