JavaTM Platform
Standard Ed. 6

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 など)。  

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

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

コンストラクタの概要
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
 

コンストラクタの詳細

ThreadLocal

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

メソッドの詳細

initialValue

protected T initialValue()
このスレッドローカル変数に対する現在のスレッドの「初期値」を返します。このメソッドは、スレッドが get() メソッドで最初にこの変数にアクセスしたときに呼び出されます。ただし、スレッドが以前に set(T) メソッドを呼び出した場合を除きます。その場合、スレッドでは initialValue メソッドは呼び出されません。通常、このメソッドはスレッド当たり 1 回だけ呼び出されますが、後続の remove() とそのあとの get() の呼び出しの場合に、再度呼び出されることもあります。  

この実装は、単に null を返すだけです。プログラマがスレッドローカル変数が null 以外の初期値を持つようにする場合、ThreadLocal をサブクラス化して、このメソッドをオーバーライドする必要があります。通常、匿名の内部クラスが使用されます。

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

get

public T get()
このスレッドローカル変数の現行スレッドのコピー内の値を返します。この変数が現在のスレッドの値を持たない場合は、まず、initialValue() メソッドの呼び出しによって返される値に初期化されます。

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

set

public void set(T value)
このスレッドローカル変数の現在のスレッドのコピーを指定された値に設定します。スレッドローカルの値を設定するのに initialValue() メソッドに大きく依存しているほとんどのサブクラスでは、このメソッドをオーバーライドする必要はありません。

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

remove

public void remove()
このスレッドローカル変数に対する現在のスレッドの値を削除します。このスレッドローカル変数が続いて現在のスレッドによって 読み取られる 場合、その値が暫定的に現在のスレッドによって設定されていないかぎり、その値はその initialValue() メソッドを呼び出すことによって再度初期化されます。その結果、現在のスレッドに initialValue メソッドの複数の呼び出しが生じることがあります。

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

JavaTM Platform
Standard Ed. 6

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

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