线程池公用变量

一般情况下,我们定义线程变量是使用ThreadLocal

private final ThreadLocal<DmeRequestContextInfo> LOCAL_DATA = new ThreadLocal<>();

但这样线程池里不能公用这个变量,需要使用 TransmittableThreadLocal

private final ThreadLocal<DmeRequestContextInfo> LOCAL_DATA = new TransmittableThreadLocal<>();

TransmittableThreadLocal(TTL)是阿里巴巴开源的一个线程本地变量(ThreadLocal)增强工具,用于解决 ​​线程池环境下 ThreadLocal 变量传递丢失​​ 的问题。它是对 Java 原生 ThreadLocal 的增强,适用于 ​​线程池任务执行​​ 场景。

注意 TransmittableThreadLocal 的作用​​:
它的作用是 ​​在多线程环境下(如线程池)传递 ThreadLocal 变量​​。
但前提是 ​​任务必须被 TtlRunnable 或 TtlCallable 包装​​,否则变量无法传递。

错误示例

for (PatrolInspectPlan item : dataList) {
    orderThreadPoolExecutor.execute(() -> {
      xxxx
    });
}

正确示例

for (PatrolInspectPlan item : dataList) {
 // 使用 TtlRunnable 包装任务,确保变量传递
 orderThreadPoolExecutor.execute(TtlRunnable.get(() -> {
     xxxx
 }));
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值