スレッド ローカルで値を設定する:
//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 を実行する複数のスレッドは、同じ A の静的 ThreadLocal 変数 myThreadLocal を更新することになり、それによって ThreadLocal 変数の目的そのものを打ち負かします。(ドキュメントで推奨されているのは、ThreadLocal に static を使用することです。)
C の someCMethod は、ThreadLocal から値を取得しているときに、「現在の」スレッドによって設定された値を取得できない場合があります。
ここで何が欠けていますか?