Foundation 1.1.2

java.lang
クラス ThreadLocal

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

public class ThreadLocal
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()
           
 
メソッドの概要
 Object get()
          このスレッドローカル変数の現行スレッドのコピー内の値を返します。
protected  Object initialValue()
          このスレッドローカル変数に対する現在のスレッドの初期値を返します。
 void set(Object value)
          このスレッドローカル変数の現在のスレッドのコピーを指定された値に設定します。
 
クラス java.lang.Object から継承されたメソッド
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

コンストラクタの詳細

ThreadLocal

public ThreadLocal()
メソッドの詳細

initialValue

protected Object initialValue()
このスレッドローカル変数に対する現在のスレッドの初期値を返します。このメソッドは、get() メソッドを使用した変数への初回アクセス時に、各スレッドローカルに対しスレッドへのアクセスごとに最大で 1 回呼び出されます。スレッドが get メソッドより前に set(Object) メソッドを呼び出す場合、initialValue メソッドはスレッド内で呼び出されません。

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

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

get

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

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

set

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

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

Foundation 1.1.2

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

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