スレッドローカルで悩むこと

ThreadLocal変数を子スレッドに引き継がせる。などと文字どおりに捉えたら
ナンセンスなことを考えてた。
でも実際に必要に迫られる設計もありうる。
InheritableThreadLocal の存在に気がつけば良いのであろうが、
その前は、スレッド生成時、実行前に、ThreadLocal変数を引き継ぐような
クラスを考えてた。
→単純にコンストラクタを呼ばせてコンストラクタ内でThreadLocal変数を
  get()で取得して スレッド開始(run())の先頭で、
 ThreadLocal変数#set(value) を実行する。。。
という情けないことを考えてた。
ThreadLocal変数 インスタンス生成をInheritableThreadLocalで
作ればこんなことしなくて良い。

=== InheritableThreadLocal を使わない宣言 ===
public class ApplicationDefine {
   private static ThreadLocal<String> _name;
   private ApplicationDefine(){}
   
   public final static void set(String name){
      if (_name==null){
         _name = new ThreadLocal<String>(){
            @Override
            protected synchronized String initialValue(){
               return "unknown";
            }
         };
      }
      _name.set(name);
   }
   public final static String get(){
      if (_name==null){
         _name = new ThreadLocal<String>(){ 
            @Override
            protected synchronized String initialValue(){
               return "unknown";
            }
         };
      }
      return _name.get();
   }
}
=== InheritableThreadLocal を使う時   ===
public class ApplicationDefine {
   private static ThreadLocal<String> _name;
   private ApplicationDefine(){}
   
   public final static void set(String name){
      if (_name==null){
         _name = new InheritableThreadLocal<String>(){ 
            @Override
            protected synchronized String initialValue(){
               return "unknown";
            }
         };

      }
      _name.set(name);
   }
   public final static String get(){
      if (_name==null){
         _name = new InheritableThreadLocal<String>(){ 
            @Override
            protected synchronized String initialValue(){
               return "unknown";
            }
         };

      }
      return _name.get();
   }
}
でも、子スレッドが自動的に引き継がれるのが意識されないので、
スレッドローカル変数であるという設計意識がズレてくるのが
後で問題にならないだろうか?
悩まなくてはならない問題ではないかと思う。