ThreadLocal

■ThreadLocalを活用してスケーラビリティーを向上させる
http://www-6.ibm.com/jp/developerworks/java/020222/j_j-threads3.html


ThreadLocalって知らんかった。
スレッドと、そのスレッドに対応づけたオブジェクトを管理するのが便利になるらしい。


下は、ThreadLocalのインタフェース。

public class ThreadLocal {
  public Object get();
  public void set(Object newValue);
  public Object initialValue();
}

で、
・getメソッドで現在のスレッドに紐付くオブジェクトを取得することができる。
・setメソッドで現在のスレッドに紐付けてオブジェクトを設定できる。
・getメソッドを呼び出したけど、オブジェクトが取れなかったときは、initialValue()メソッドの結果が戻される。
・スレッドが終了すると、そのスレッドと関連するオブジェクトはGCされる。


ThreadLocalを継承して、initialValue()をオーバライドするのが基本みたい。


上記URLでは、
・スレッドごとのSingletonオブジェクトを作成する。
・1つのオブジェクトで複数スレッドのデバッグ情報を管理する。
が紹介されているけど、同じことを普通に実装しようとするより全然楽になることが分かる。


ThreadLocalには、InheritableThreadLocalというサブクラスがある。
これは親プロセスのInheritableThreadLocalが持っているオブジェクトが子プロセスにも引き継がれるというものみたい。


コレ便利だわ〜〜。覚えとこ。