在 Thread Local 中设置一个值:
//Class A holds the static ThreadLocal variable.
Class A{
public static ThreadLocal<X> myThreadLocal = new ThreadLocal<X>();
....
}
//A Class B method sets value in A's static ThreadLocal variable
class B{
{
public void someBmethod(){
X x = new X();
A.myThreadLocal.set(x);
}
}
//Class C retrieves the value set in A's Thread Local variable.
Class C {
public void someCMethod(){
X x = A.myThreadLocal.get();
}
...
}
问题:现在假设这是一个 Web 应用程序,并且线程按顺序执行: B.someBMethod
、C.someCMethod。
多个线程执行 B 的 someBMethod,最终会更新SAME A 的静态 ThreadLocal 变量 myThreadLocal,从而达到了 ThreadLocal 变量的目的。(根据文档,建议对 ThreadLocal 使用静态。)
C 的 someCMethod,虽然从 ThreadLocal 检索值可能无法获得“当前”线程设置的值。
我在这里想念什么?