|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
java.lang.Object | +--java.lang.ThreadLocal
このクラスはスレッドローカル変数を提供します。これらの変数は、get メソッドまたは set メソッドを使ってアクセスするスレッドがそれぞれ独自に、変数の初期化されたコピーを持つという点で、通常の変数と異なります。通常、ThreadLocal インスタンスは、状態をスレッドに関連付けようとするクラスでの private static フィールドです (ユーザ ID、トランザクション ID など)。
たとえば、以下のクラスでは、private static ThreadLocal インスタンス (serialNum) は、クラスの static SerialNum.get() メソッドを呼び出すスレッドごとに「シリアル番号」を管理します。スレッドのシリアル番号は、SerialNum.get() の最初の呼び出し時に割り当てられ、その後の呼び出しで変更されることはありません。
public class SerialNum {
// The next serial number to be assigned
private static int nextSerialNum = 0;
private static ThreadLocal serialNum = new ThreadLocal() {
protected synchronized Object initialValue() {
return new Integer(nextSerialNum++);
}
};
public static int get() {
return ((Integer) (serialNum.get())).intValue();
}
}
各スレッドは 、スレッドが生存していて ThreadLocal インスタンスがアクセス可能である間は、スレッドローカル変数のコピーへの暗黙的な参照を保持します。スレッドが終了すると、スレッドローカルインスタンスのコピーは、すべてガベージコレクトされます (これらのコピーへの参照がほかに存在する場合を除く)。
| コンストラクタの概要 | |
ThreadLocal()
|
|
| メソッドの概要 | |
Object |
get()
このスレッドローカル変数の現行スレッドのコピー内の値を返します。 |
protected Object |
initialValue()
このスレッドローカルな変数に対する現行スレッドの初期値を返します。 |
void |
set(Object value)
このスレッドローカル変数の現行スレッドのコピーを、指定された値に設定します。 |
| クラス java.lang.Object から継承したメソッド |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
| コンストラクタの詳細 |
public ThreadLocal()
| メソッドの詳細 |
protected Object initialValue()
get() または set(Object) メソッドを使用して最初に変数にアクセスする際に呼び出されます。プログラマがスレッドローカル変数を null 以外の値で初期化する場合、ThreadLocal をサブクラス化して、このメソッドをオーバーライドする必要があります。通常、匿名の内部クラスが使用されます。initialValue の典型的な実装は、適切なコンストラクタを呼び出して、新たに構築されたオブジェクトを返します。
public Object get()
public void set(Object value)
value - このスレッドローカルの現行スレッドのコピーに格納される値
|
JavaTM 2 Platform Std. Ed. v1.4.0 |
||||||||||
| 前のクラス 次のクラス | フレームあり フレームなし | ||||||||||
| 概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド | ||||||||||
Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.