【发布时间】:2013-04-21 09:50:12
【问题描述】:
在线程本地设置一个值:
//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 检索值时,可能无法获得“当前”线程设置的值。
我在这里错过了什么?
【问题讨论】:
标签: java multithreading jakarta-ee thread-local