基于ThreadLocal、InheritableThreadLocal与TransmittableThreadLocal技术解析,线程间数据共享在投行风控与交易系统中的应用实战

背景

我们在进行全链路日志记录的场景中,使用双AOP+TraceId标识我们的每一个请求,在保证链路追踪的同同时,保证高并发场景下的性能损耗。
但是,我们发现,在第一个版本:使用ThreadLocal记录traceId的时候,在子任务或者后续任务的场景中,会出现traceId无法传递的问题。

痛点分析

出现以上问题,主要是因为ThreadLocal在子任务和后续任务等无法进行数据共享。
基于此,把风控系统和交易系统涉及到线程数据共享的场景抽取出来,进行根因分析。

  1. 有多少种线程共享的方式?
  2. 有多少业务场景?
  3. 在不同线程共享方式下,不同场景的不同表现?
  4. 在风控系统和交易系统中,如何进行技术选型建议?是否可以形成线程共享技术委员会标准文档,形成知识库,以便后续使用。

技术解析

目前有三种线程共享的方式: ThreadLocal、InheritableThreadLocal与TransmittableThreadLocal
同时抽象出来的场景有以下四种:

场景 描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值