В документации JDK 1.6 приведен пример использования LocalThread<T>
.Я копирую и вставляю его сюда:
Например, класс ниже генерирует уникальные идентификаторы, локальные для каждого потока.Идентификатор потока назначается при первом вызове 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();
}
Теперь после первого вызова происходит инициализация переменной.