一般情况下,我们定义线程变量是使用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
}));
}
1998

被折叠的 条评论
为什么被折叠?



