ThreadLocal とその使用に関する次の SO スレッドに関する興味深い議論を既に読みました。
- ThreadLocal 変数はいつ、どのように使用すればよいですか?
- ThreadLocal の目的は?
- ThreadLocal の使用によって再利用性が低下する仕組み
- 要求された Locale を格納するために ThreadLocal を使用してもよろしいですか?
この質問は、設計時の選択に向けられています。私のシナリオはこんな感じです
ほとんどすべてのステップで同じスレッド内で使用する必要がある Web アプリケーションに値オブジェクトがある場合。以下のような2つのインターフェース設計オプションを考えることができます
アプローチ #1メソッド パラメーターの受け渡しを使用します。
ここまでは、値オブジェクト インターフェイスのパラメーターを持つメソッドを持つことができるインターフェイスを考え出すことに集中してきました。
例えば:
public interface SomeDataProcessorInterface {
public void processSomething(SomeValueObjectInterface vo);
}
public interface SomeValueObjectInterface extends Serializable {}
アプローチ #2 ThreadLocal の使用
このアプローチでは、メソッド パラメーターのないインターフェイスを使用し、静的クラスを作成して、スレッドローカルを使用して値オブジェクトにアクセスできます。
例えば:
public interface SomeDataProcessorInterface {
public void processSomething();
}
public interface SomeValueObjectInterface extends Serializable {}
public Class StaticClass {
private static ThreadLocal<SomeValueObjectInterface> threadLocalVO = new ThreadLocal<SomeValueObjectInterface>();
public static ThreadLocal getThreadLocal() {
return threadLocal;
}
どちらのアプローチが優れていますか? なぜ?
これらの実装のうち、メモリリークの可能性が少ないのはどれですか?
これらの実装のうち、Java ガベージ コレクターに適しているのはどれですか?
他のスレッドのいくつかのポイントを読みましたが、ゼロから始める場合、どのアプローチが優れているかはまだわかりません。