解決策があるとは思えない問題がありますが、とにかくここで試してみます。私のアプリケーションはスレッドプールを使用し、このプール内のいくつかのスレッドは継承可能なスレッドローカル変数を持っています。 ThreadPoolExecutorクラスを拡張して、スレッドの実行が完了したときに、スレッドローカル変数(afterExecuteコールバックメソッド内)を実質的にクリアしました。InheritableThreadLocalとスレッドプール
InheritableThreadLocal変数がある場合、親スレッドからThreadLocal変数の値を取得するためにスレッドが初期化されたときに、childValue()メソッドが呼び出されることを理解しています。しかし、私の場合は、スレッドが次回使用されたとき(一度使用された後)、InheritableThreadLocal変数の値はnullです(beforeExecuteで以前クリアされていたためです)。スレッドの作成時にInheritableThreadLocalのchildValueメソッドが本質的にシミュレーションできるように、beforeExecuteの親スレッドのスレッドローカル変数にアクセスする方法はありますか?
結果ですか?子スレッドが最初に作成されて以来、異なる親スレッドからの次の実行時に必要な値は変更されていますか? –
@Bert - これが理由です。基本的には、スレッドIDをスレッドローカル変数に格納しています。この変数は、子スレッドの複数回の使用を変更します。 – neesh