JavaTM 2 Platform
Standard Ed. 5.0

java.lang
クラス ThreadLocal<T>

java.lang.Object
  上位を拡張 java.lang.ThreadLocal<T>
直系の既知のサブクラス:
InheritableThreadLocal

public class ThreadLocal<T>
extends Object

このクラスはスレッドローカル変数を提供します。これらの変数は、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 インスタンスがアクセス可能である間は、スレッドローカル変数のコピーへの暗黙的な参照を保持します。スレッドが終了すると、スレッドローカルインスタンスのコピーは、すべてガベージコレクトされます (これらのコピーへの参照がほかに存在する場合を除く)。

導入されたバージョン:
1.2

コンストラクタの概要
ThreadLocal()
          スレッドローカル変数を作成します。
 
メソッドの概要
 T get()
          このスレッドローカル変数の現行スレッドのコピー内の値を返します。
protected  T initialValue()
          このスレッドローカル変数に対する現在のスレッドの初期値を返します。
 void remove()
          この ThreadLocal の値を削除します。
 void set(T value)
          このスレッドローカル変数の現在のスレッドのコピーを指定された値に設定します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

ThreadLocal

public ThreadLocal()
スレッドローカル変数を作成します。

メソッドの詳細

initialValue

protected T initialValue()
このスレッドローカル変数に対する現在のスレッドの初期値を返します。このメソッドは、スレッドローカルごとにアクセスしているスレッド当たり 1 回だけ呼び出されます。最初、スレッドは get() メソッドで変数にアクセスします。スレッドが get メソッドを呼び出す前に set(T) メソッドを呼び出す場合、initialValue メソッドはスレッドで呼び出されません。

この実装は、単に null を返すだけです。プログラマがスレッドローカル変数を null 以外の値で初期化する場合、ThreadLocal をサブクラス化して、このメソッドをオーバーライドする必要があります。通常、匿名の内部クラスが使用されます。initialValue の典型的な実装は、適切なコンストラクタを呼び出して、新たに構築されたオブジェクトを返します。

戻り値:
このスレッドローカルの初期値

get

public T get()
このスレッドローカル変数の現行スレッドのコピー内の値を返します。スレッドで初めてこのメソッドが呼び出されたときは、コピーが作成されて初期化されます。

戻り値:
このスレッドローカルの現行スレッドの値

set

public void set(T value)
このスレッドローカル変数の現在のスレッドのコピーを指定された値に設定します。スレッドローカルの値を設定するのに initialValue() メソッドに大きく依存している多くのアプリケーションではこの機能は必要ありません。

パラメータ:
value - このスレッドローカルの現行スレッドのコピーに格納される値

remove

public void remove()
この ThreadLocal の値を削除します。削除すると、ThreadLocal の格納要件が少なくなります。この ThreadLocal がもう一度アクセスされると、ThreadLocal はデフォルトで initialValue に設定されます。

導入されたバージョン:
1.5

JavaTM 2 Platform
Standard Ed. 5.0

バグの報告と機能のリクエスト
さらに詳しい API リファレンスおよび開発者ドキュメントについては、Java 2 SDK SE 開発者用ドキュメントを参照してください。開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、およびコード実例が含まれています。

Copyright 2004 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。