我正在進行互斥任務,但是當我開始時,我發現我的應用程序的線程ID從9開始。當我再次編譯和執行它時,它不會改變。有沒有我缺少的問題,或者Java Thread ID是否可以以任意數字開始? This question是相關的。Java線程ID是否應始終從0開始?
對於那些有興趣,這裏是從赫利希&沙維特的「多處理器編程的藝術」一類的編號線程:
public class ThreadID {
private static volatile int nextID = 0;
private static class ThreadLocalID extends ThreadLocal<Integer> {
protected synchronized Integer initialValue() {
return nextID++;
}
}
private static ThreadLocalID threadID = new ThreadLocalID();
public static int get() {
return threadID.get();
}
public static void set(int index) {
threadID.set(index);
}
}
然後,您可以撥打
ThreadID.get();
這將自動遞增數字並始終從1開始。