|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
java.lang.Object java.lang.ThreadLocal<T>
public class ThreadLocal<T>
このクラスはスレッドローカル変数を提供します。これらの変数は、get メソッドまたは set メソッドを使ってアクセスするスレッドがそれぞれ独自に、変数の初期化されたコピーを持つという点で、通常の変数と異なります。通常、ThreadLocal インスタンスは、状態をスレッドに関連付けようとするクラスでの private static フィールドです (ユーザー ID、トランザクション ID など)。
たとえば、次のクラスでは、各スレッドに対してローカルな一意の識別子が生成されます。スレッドの ID は、UniqueThreadIdGenerator.getCurrentThreadId() の最初の呼び出し時に割り当てられ、その後の呼び出しで変更されることはありません。
import java.util.concurrent.atomic.AtomicInteger; public class UniqueThreadIdGenerator { private static final AtomicInteger uniqueId = new AtomicInteger(0); private static final ThreadLocal < Integer > uniqueNum = new ThreadLocal < Integer > () { @Override protected Integer initialValue() { return uniqueId.getAndIncrement(); } }; public static int getCurrentThreadId() { return uniqueId.get(); } } // UniqueThreadIdGenerator
各スレッドは 、スレッドが生存していて ThreadLocal インスタンスがアクセス可能である間は、スレッドローカル変数のコピーへの暗黙的な参照を保持します。スレッドが終了すると、スレッドローカルインスタンスのコピーは、すべてガベージコレクトされます (これらのコピーへの参照がほかに存在する場合を除く)。
コンストラクタの概要 | |
---|---|
ThreadLocal()
スレッドローカル変数を作成します。 |
メソッドの概要 | |
---|---|
T |
get()
このスレッドローカル変数の現行スレッドのコピー内の値を返します。 |
protected T |
initialValue()
このスレッドローカル変数に対する現在のスレッドの「初期値」を返します。 |
void |
remove()
このスレッドローカル変数に対する現在のスレッドの値を削除します。 |
void |
set(T value)
このスレッドローカル変数の現在のスレッドのコピーを指定された値に設定します。 |
クラス java.lang.Object から継承されたメソッド |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
コンストラクタの詳細 |
---|
public ThreadLocal()
メソッドの詳細 |
---|
protected T initialValue()
get()
メソッドで最初にこの変数にアクセスしたときに呼び出されます。ただし、スレッドが以前に set(T)
メソッドを呼び出した場合を除きます。その場合、スレッドでは initialValue メソッドは呼び出されません。通常、このメソッドはスレッド当たり 1 回だけ呼び出されますが、後続の remove()
とそのあとの get()
の呼び出しの場合に、再度呼び出されることもあります。
この実装は、単に null を返すだけです。プログラマがスレッドローカル変数が null 以外の初期値を持つようにする場合、ThreadLocal をサブクラス化して、このメソッドをオーバーライドする必要があります。通常、匿名の内部クラスが使用されます。
public T get()
initialValue()
メソッドの呼び出しによって返される値に初期化されます。
public void set(T value)
initialValue()
メソッドに大きく依存しているほとんどのサブクラスでは、このメソッドをオーバーライドする必要はありません。
value
- このスレッドローカルの現行スレッドのコピーに格納される値public void remove()
initialValue()
メソッドを呼び出すことによって再度初期化されます。その結果、現在のスレッドに initialValue メソッドの複数の呼び出しが生じることがあります。
|
JavaTM Platform Standard Ed. 6 |
|||||||||
前のクラス 次のクラス | フレームあり フレームなし | |||||||||
概要: 入れ子 | フィールド | コンストラクタ | メソッド | 詳細: フィールド | コンストラクタ | メソッド |
Copyright 2009 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。