LocalThread<T>
の使い方の例をJDK 1.6ドキュメントに示します。私はここにコピーして貼り付けます:ThreadLocal <T> JDKのドキュメント
たとえば、以下のクラスは各スレッドに固有の固有の識別子を生成します。スレッドの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
私の問題は、次のとおりです。
複数のスレッドが何の初期化はありませんので、それが唯一の0を返すUniqueThreadIdGenerator.getCurrentThreadId()
呼び出すとき。
public static int getCurrentThreadId() {
return uniqueNum.get();
}
これで、最初の呼び出しの後、変数が初期化されます。
一意のIDを生成する代わりに、各スレッドが既に持つ一意のIDを使用できます。 'long id = Thread.currentThread()。getId();' –