我正在进行互斥任务,但是当我开始时,我发现我的应用程序的线程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开始。