モジュール java.base
パッケージ java.lang

クラスThreadLocal<T>

java.lang.Object
java.lang.ThreadLocal<T>
型パラメータ:
T - スレッドのローカル値のタイプ
直系の既知のサブクラス:
InheritableThreadLocal

public class ThreadLocal<T> extends Object
このクラスはスレッド・ローカル変数を提供します。 これらの変数は、getメソッドまたはsetメソッドを使ってアクセスするスレッドがそれぞれ独自に、変数の初期化されたコピーを持つという点で、通常の変数と異なります。 通常、ThreadLocalインスタンスは、状態をスレッドに関連付けようとするクラスでのprivate staticフィールドです(ユーザーID、トランザクションIDなど)。

たとえば、次のクラスでは、各スレッドに対してローカルな一意の識別子が生成されます。 スレッドのIDは、ThreadId.get()の最初の呼出し時に割り当てられ、その後の呼出しで変更されることはありません。

 import java.util.concurrent.atomic.AtomicInteger;

 public class ThreadId {
     // Atomic integer containing the next thread ID to be assigned
     private static final AtomicInteger nextId = new AtomicInteger(0);

     // Thread local variable containing each thread's ID
     private static final ThreadLocal<Integer> threadId =
         new ThreadLocal<Integer>() {
             @Override protected Integer initialValue() {
                 return nextId.getAndIncrement();
         }
     };

     // Returns the current thread's unique ID, assigning it if necessary
     public static int get() {
         return threadId.get();
     }
 }
 

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

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