我正在探讨这个特定的问题,我想知道是否有人遇到过这个问题。我有一个方法: methodA() -这将创建一个名为"temp“的ThreadLocal,如果它不存在,如果ThreadLocal存在,它将返回该ThreadLocal变量(在这个场景中,IE:"temp”)
基本上,我遇到的场景是:我调用methodA() -(我创建了ThreadLocal变量"old_temp"),然后调用该方法:
CompletableFuture.supplyAsync( () ) ->{ThreadContext.put("RequestId",requestId);methodB();},iotaInvokerService).handleAsync(methodC();methodB()来自另一个团队的库,methodB()调用methodA()。
当methodB()调用methodA()时,我希望methodA()返回最初在第一次调用methodA()时创建的ThreadLocal变量"old_temp“。但是,当methodB()调用methodA()而不是返回"old_temp“ThreadLocal变量时,它会创建一个全新的ThreadLocal变量,我不想使用这个变量。当methodB()调用methodA()时,我希望它返回"old_temp“。有人能帮我解决这个问题吗?
我相信,当用一个CompletableFuture.supplyAsync调用executorService时,它会创建一个ThreadLocal变量上下文不传递给它的新线程,这似乎就是问题所在。
我看到了将ThreadLocal传播到从ExecutorService获取的新线程,但我仍然不确定/仍然不清楚如何将它应用到我的场景中。我认为问题是,我知道什么是ThreadLocal变量--这是我想要的,但我不太确定。
https://stackoverflow.com/questions/74267705
复制相似问题