JDK 1.6文檔顯示有關如何使用LocalThread<T>
的例子。我複製並粘貼到此處: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
我的問題是:
當多個線程調用UniqueThreadIdGenerator.getCurrentThreadId()
只因爲沒有初始化返回0。它不應該是這樣的:
public static int getCurrentThreadId() {
return uniqueNum.get();
}
現在在第一次調用後,它會去初始化變量。
代替生成一個唯一的ID,你可以使用的唯一的ID每個線程都有了。 '長ID = Thread.currentThread()的getId();' –