Java调用链跟踪关键技术(三)线程变量

317 阅读2分钟

banner窄.png

铿然架构  |  作者  /  铿然一叶 这是铿然架构的第 3 篇原创文章

相关阅读:

萌新快速成长之路
如何编写软件设计文档
JAVA编程思想(一)通过依赖注入增加扩展性
JAVA编程思想(二)如何面向接口编程
JAVA编程思想(三)去掉别扭的if,自注册策略模式优雅满足开闭原则
JAVA编程思想(四)Builder模式经典范式以及和工厂模式如何选?
Java编程思想(七)使用组合和继承的场景
JAVA基础(一)简单、透彻理解内部类和静态内部类
JAVA基础(二)内存优化-使用Java引用做缓存
JAVA基础(三)ClassLoader实现热加载
JAVA基础(四)枚举(enum)和常量定义,工厂类使用对比
JAVA基础(五)函数式接口-复用,解耦之利刃
Seata源码(一)初始化
Seata源码(二)事务基础对象
Seata源码(三)事务处理类结构和流程
Seata源码(四)全局锁GlobalLock
Seata源码(五)Seata数据库操作
Seata源码(六)Seata的undo日志操作
Seata源码(七)Seata事务故障处理
Seata源码(八)Seata事务生命周期hook
Seata源码(九)TCC核心类和处理逻辑
Seata源码(十)RM接收到请求后的调用过程
Seata源码(十一)TC接收到请求后的处理过程\


一、Java类成员作用域

JAVA类成员作用域参考下图:

  1. Java虚拟机级作用域,通过在类成员变量前加static关键字修饰实现在整个Java虚拟机中共享。
  2. 类实例级作用域,成员变量前不加static关键字修饰则可,如图中Class A、Class B、Class C的成员变量,只在类实例中共享。
  3. 除了以上级别的成员变量共享,在调用链跟踪时要能识别不同分层下的多个类实例的调用是同一个请求,而这个请求的调用都在一个独立线程内完成,此时就要用到线程级变量共享。

二、实现线程变量共享

在Java中可以通过ThreadLocal实现线程变量共享,即便不需要跟踪调用链,仅仅是跟踪SQL调用的数据流也是非常有用。

ThreadLocal的使用可以参考这篇文章:www.jianshu.com/p/4e1fcdfb6…
end.