JDK 1.6のドキュメントには、の使用方法に関する例が示されていますLocalThread<T>
。ここにコピーして貼り付けます:
たとえば、以下のクラスは、各スレッドにローカルな一意の識別子を生成します。スレッドの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
私の問題は:
複数のスレッドが呼び出すUniqueThreadIdGenerator.getCurrentThreadId()
場合、初期化がないため、0のみが返されます。このようにすべきではありません:
public static int getCurrentThreadId() {
return uniqueNum.get();
}
最初の呼び出しの後、変数を初期化します。