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();
}
现在在第一次调用之后,它会初始化变量。